编程题—面试题48. 最长不含重复字符的子字符串

48. 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。此时,我们更新无重复字符子串的最大长度,即。请注意,你的答案必须是。分别表示子串的左右边界,其中。是滑动窗口的右边界,用哈希表。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。记录每个字符是否出现过。是滑动窗口的左边界,遍历结束后,我们返回。,所以其长度为 1。,所以其长度为 3。 阅读详情

题目链接

题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:
输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:滑动窗口

1、利用滑动窗口,如果当前遍历的字母不在已遍历的字符串中,则右指针加1,判断当前最大窗口和当前窗口的最大值为最终结果
2、如果窗口中存在该元素,则将 head 指针右移,直到窗口中不包含该元素;

class Solution {
    public int lengthOfLongestSubstring(String s) {
    	if (s.length()==0) return 0;
    	else if (s.length()==1) return 1;
    	int res=1;
    	int left=0;
    	for(int i=1;i<s.length();) {
    		if (!isNot(s, left, i-1, s.charAt(i))) {
    			//如果没有在字串中,则加入
    			i++;
    			res=Math.max(res, i-left);
    		}else {
    			//如果在字串中
    			left++;
    		}
    	}
    	return res;
    }
    public boolean isNot(String s,int left,int right,char ch) {
    	for(int i=left;i<=right;i++) {
    		if (s.charAt(i)==ch) return true;
    	}
    	return false;
    }
}
解法2:利用hashmap实现滑动窗口

1、如果hashmap中没有当前的字符,将key,value加入
2、如果有的话,则计算长度,如果长度比刚才的结果大,则改变最大长度
3、将最左边的指针移到hashmap中重复字符的右边一位
4、第三步需要注意的是,如果左指针加1没有刚才的左指针大,则不进行移动,例如测试用例tmm2nx


import java.util.HashMap;
class Solution {
    public int lengthOfLongestSubstring(String s) {
    	int res=0;
    	int head=0;
    	HashMap<Character, Integer> resmap = new HashMap<Character, Integer>();
    	int i=0;
    	for(i=0;i<s.length();i++) {
    		if(!resmap.containsKey(s.charAt(i))) {
    			//如果没有在就添加进去
        		resmap.put(s.charAt(i), i);
        		res=Math.max(i-head, res);
        	}else {
        		//更新hash表
        		res=Math.max(i-head, res);
        		if (resmap.get(s.charAt(i))+1>head) {//测试用例tmm2nxt
        			head=resmap.get(s.charAt(i))+1;
        		}
        		resmap.remove(s.charAt(i));
        		resmap.put(s.charAt(i), i);
        	}
    	}
    	return Math.max(i-head, res);
    }
}
解法3、动态规划

参考:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/pythonti-jie-shuang-100-dp-hua-dong-chuang-kou-shu/

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决 (Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。 阅读详情

相关推荐

华为Atlas 300I推理卡驱动安装避坑指南:不同安装方式的选择与优化

本文详细解析华为Atlas 300I推理卡驱动安装的三种主流方式(.run、.rpm和源码编译),提供关键环境检查步骤、安装流程优化建议及常见问题解决方案,帮助开发者高效完成芯片推理卡部署并规避典型安装陷阱。

q9w8e7r6t5的博客 431

java实现:给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。

给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。

lsw333521的博客 1441

NXP KW45开发实战:如何在MCUXpresso IDE中正确配置J-Link并解决设备识别问题

本文详细介绍了在MCUXpresso IDE中配置J-Link以支持NXP KW45无线MCU开发的实战指南。从环境准备到J-Link深度配置,再到烧录流程优化和高级调试技巧,帮助开发者高效解决设备识别问题并提升开发效率。特别推荐使用JLinkRemoteServer.exe进行多设备并行调试,并提供了烧录速度优化和低功耗调试的实用技巧。

gray5的博客 864

49.最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从 a 到 z 的字符。输入字符串长度 [0,1000]。输入:"abcabc"

m0_56312312的博客 254

UCIe物理层 —— 逻辑协议 (2)

本章开始主要介绍UCIe协议第四章,物理层逻辑定义和规范。如其他的通信协议一样,接口的物理层包含两个部分,逻辑子层和电气子层。其中逻辑层主要负责:1.定义接口信号和时序2. 定义发送端如何将上层数据分发到各个物理通道以及接收端如何把从各个通道收到的数据恢复成byte stream(Flit)。3. Broken Lane的repair和remap。4. 链路初始化,训练(training)和电源状态管理/切换。5. 扰码Scrambling和training sequence的产生。

m0_47581558的博客 1477

ASTRA Toolbox学习笔记-Python

ASTRA Toolbox 是一个用于处理 X 射线相干散射和 X 射线传输成像的开源算法工具箱。本文档概述了该工具箱的基本概念。

hou9021的博客 8261

算法无重复字符的最长子串

无重复字符的子串是指在一个字符串中,没有任何字符重复出现的连续子序列。例如,在字符串 “abcabcbb” 中,最长的无重复字符子串是 “abc”,长度为3。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 2164

TEM图像处理实战指南:从基础操作到金属材料分析

本文提供了一份全面的透射电镜(TEM)图像处理实战指南,涵盖从基础操作到金属材料深度分析的全流程。重点讲解了TEM图像预处理、选区电子衍射(SAED)标定、高分辨像(HRTEM)分析及STEM图像应用等核心技能,并结合金属材料(如铝合金、钢)的析出相鉴定、位错分析和界面结构研究等实际案例,帮助研究者从原始数据中准确提取晶体结构、缺陷及成分信息。

weixin_29284201的博客 209

剑指Offer-题48(Java版):最长不含重复字符的子字符串

参考自:《剑指Offer——名企面试官精讲典型编程题》 题目:最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。例如,在字符串中”arabcacfr”,最长非重复子字符串为”acfr”,长度为4。 主要思路:使用动态规划,记录当前字符之前的最长非重复子字符串长度f(i-1),其中i为当前字符的位...

浊酒入清梦的博客 6882

直驱风机并网系统次同步振荡机理与振荡源定位方法研究

摘要: 本文针对直驱风机并网系统次同步振荡问题,研究了其产生机理与振荡源定位方法。通过建立系统小信号模型,采用特征值分析法揭示了次同步振荡的产生机制,并分析了电网强度、控制器参数对振荡特性的影响。基于暂态能量流理论,提出了通过计算各元件耗散能量来定位振荡源的方法。在MATLAB/Simulink平台搭建仿真系统验证了所提方法的有效性,为直驱风电场次同步振荡的分析与抑制提供了理论依据。 关键词:直驱风机;次同步振荡;小信号模型;暂态能量;振荡源定位

huanghm88的专栏 100

Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.5 V4L2 control的原理和实现

既然涉及到视频输入,就会有很多与 相关的效果,比如对比度、饱和度、色温、白平衡等等,这些都是通用的、必须的控制项,并且大多数仅需要设置一个整数值即可。 内核中已经为我们提供了这个控制类型的,我们只需要明确自己需要添加什么控制类型,然后将其添加进内核中即可。该部分摄像头代码一半厂家会提供驱动或者相对应的参数,否则没有图像处理知识很难开发出来。 返回总目录...

DSMGUOGUO的博客 1435

一个字符串,返回该字符串中最长的连续不重复子串(字符串只包含小写字母)

一个字符串,返回该字符串中最长的连续不重复子串(字符串只包含小写字母) C# static string GetSubString(string s) { todo } 2.

Aver3的博客 2335

SAP 费用化采购订单简介

费用性采购的核心特点费用性采购的流程费用性采购的优势适用场景业务场景前台操作1、创建成本中心---KS012、创建采购订单---ME21N3、采购订单审批---ME29N4、采购订单收货---MIGO5、查看成本中心费用---S_ALR_870136116、控制费用化的采购订单自动带出科目和成本中心SAP费用性采购(Expense Procurement)指的是企业在采购过程中,直接将采购的物料或服务成本计入费用科目,而不是记入库存账户的采购行为。

我小时候很黑的博客 2015

【Java】面试题48:最长不含重复字符的子字符串

题目:最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。例如,在字符串中”arabcacfr”,最长非重复子字符串为”acfr”,长度为4。 **主要思路:**使用动态规划,记录当前字符之前的最长非重复子字符串长度f(i-1),其中i为当前字符的位置。每次遍历当前字符时,分两种情况: 1)若当前字符第...

小小核桃 3907

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

剑指 Offer(第2版)面试题 48:最长不含重复字符的子字符串

剑指 Offer(第2版)面试题 48:最长不含重复字符的子字符串

ProgramNovice的博客 1017

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LeetCode--最长不含重复字符的子字符串

LeetCode--最长不含重复字符的子字符串 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 leetcode题,面试48 最长不含重复字符的子字符串 题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解...

归子莫的博客 1405

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

剑指offer面试题48(java版):最长不含重复字符的子字符串

welcome to my blog 剑指offer面试题48(java版):最长不含重复字符的子字符串 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无...

littlehaes的博客 1206

面试题 第48题,最长不含重复字符的子字符串

剑指 Offer 48. 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你

qq_44878796的博客 266

剑指offer 48: 最长不含重复字符的子字符串

使用循环实现。其中创建了一个长度为26的辅助数组,存放各字符在字符串中最后出现的位置。 /** *Copyright @ 2019 Zhang Peng. All Right Reserved. *Filename: *Author: Zhang Peng *Date: *Version: *Description:剑指offer<第二版> 面试题48 最长不含重复字符的子...

Ben 530

leetcode.剑指offer.面试48.最长不含重复字符的子字符串

leetcode.剑指offer.面试48.最长不含重复字符的子字符串题目解题思路Java代码描述 题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 解题思路 此题在一个多月之前已经AK过,但是印象中当时做的时候也不是很顺利,思考的比较久。但未想到,今天再次做的时候,居然生生用了两个多小时才通过。而且过程中出错的地方不少,可谓非常坎坷。痛定思痛,决定要把这道题的...

Yangliu0326的博客 309

Java详解剑指offer面试题48--最长不含重复字符串的子字符串

Java详解剑指offer面试题48–最长不含重复字符串的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含'a'~'z'之间的字符,例如在字符串"arabcacfr"中,最长的不含重复字符的子字符串是"acfr",长度为4 动态规划,定义f(i)f(i)f(i)表示以第i个字符为结尾的不含重复字符的子字符串长度。 如果第i个字符之前没有出现过,则f(i)=f(i−1)+1f(i) = f(i -1) +1f(i)=f(i−1)+1,比如‘abc

快乐李同学的博客 525

面试题48:最长不含重复字符的子字符串

题目: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含a~z的字符。例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4。 分析: 我们定义函数f(i)表示以第i个字符为结尾的,不包含重复字符的子字符串的最长长度。我们从左到右逐一扫描字符串中的每个字符。当我们计算第i个字符为结尾的不包含重复字符的子字符...

王劭阳的博客 418

剑指Offer对答如流系列 - 最长不含重复字符的子字符串

文章目录面试题48:最长不含重复字符的子字符串一、题目描述二、问题分析三、问题解决 面试题48:最长不含重复字符的子字符串 一、题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。 例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4. 二、问题分析 遇到问题,先分析问题,由分析的...

明月沉江春雾晓 1029

Leetcode刷题:剑指offer【面试题48 最长不含重复字符的子字符串】

【面试题48 最长不含重复字符的子字符串】 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 Leetcode题目对应位置: 面试题48:礼物的最大价值最长不含重复字符的子字符串 思路 1:暴力解法,即滑动窗口。遍历字符串中的每一个字符,向后扩展,看最大能扩展到哪里,记录下最大长度即可。 时间复杂度:O(n2)O(n^2)O(n2) 空间复杂度:O(1)O(1)O(1) class Solution: def lengthOfLongestSubstring(self,

学习 & 分享 ~ 433

Leetcode 面试题48. 最长不含重复字符的子字符串【动态规划】

文章目录问题描述解题报告实现代码参考资料 问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 解题报告 dp[i]dp[i]dp[i] 表示以第 iii 个字符结尾的最长子字符串的长度。 记 dp[i−1]dp[i-1]dp[i−1] 的起始位置为 ppp 求 dp[i]dp[i]dp[i] 时: 逆序遍历 s[i−1],s[i−2],⋯ ,s[p]s[i-...

MD 530

剑指 Offer 48. 最长不含重复字符的子字符串

剑指 Offer 48. 最长不含重复字符的子字符串 题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 思路 之前考虑的很复杂,其实就是一个标准的滑动窗口问题,从尾进,从头出。代码如下 代码 public int lengthOfLongestSubstring(String s) { Set<Character>

1160200515的博客 179
上一篇: 腾讯、阿里、美团2020年暑期实习面试
下一篇: 编程题—面试题56 - I. 数组中数字出现的次数
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值