首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无重复字符的最长字串

Longest Substring Without Repeating Characters 已知一个字符串,求用该字符串的无重复字符组成的最长子串的长度。...算法设计 利用滑动窗口 双指针维护滑动窗口,整个过程中,使用begin与i维护一个窗口,该窗口中的子串满足题目 条件(无重复的字符),窗口线性向前滑动,整体时间复杂度为O(n)。...1.设置一个记录字符数量的字符哈希,char_map; 2.设置一个记录当前满足条件的最长子串变量word; 3.设置最长满足条件的子串的长度result; 4.设置两个指针(记作指针i与指针begin...)指向字符串第一个字符; 5.i指针向后逐个扫描字符串中的字符,在这个过程中,使用char_map记录字符数量 如果word中没出现过该字符:对word尾部添加字符并检查result是否需要更新;...否则:begin指针向前移动,更新char_map中的字符数量,直到字符s[i]的数量为1;更新word,将 word赋值为begin与i之间的子串。

68530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    无重复字符的最长子串

    定义一个map数据结构存储(k,v),其中key值为字符,value值为字符位置+1,加1表示从字符位置后一个才开始不重复 我们定义不重复子串的开始位置为start,结束位置为end 随着end不断遍历向后...,会遇到与【start,end】区间内字符相同的情况,此时将字符作为key值,获取其value值,并更新start,此时【start,end】区间内不存在重复字符 无论是否更新start,都会更新其map...char element=s.charAt(end); if (map.containsKey(element)){ //为了防止连续重复字符...,这里要进行一次判断 //+1表示该元素后一个元素才是不重复字符串的开始 start=Math.max(map.get(element)+...1,start); } max=Math.max(max,end-start+1); //保存最后一个该结点的位置;

    41174

    无重复字符的最长子串

    今天和大家分享的题目是,给定一个字符串,找出不含有重复字符的最长子串的长度。具体示例如下。...,如有检测到已经保存有索引并且索引值大于等于子串的起始位置,则表明移动j时,和i之间出现了重复字符,此时对比子串长度,并保留大的子串长度。...带有yield的函数不再是一个普通函数,而是一个生成器generator,可用于迭代。 yield是一个类似return的关键字,迭代一次遇到yield时就返回yield后面(左边)的值。...重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。 简要理解:yield就是return返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。...语法是:str.join(sequence),sequence——要连接的元素序列。 返回值:返回通过指定字符连接序列中元素后生成新的字符串。

    65330

    无重复字符的最长子串

    示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。...示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。...0 { return 0; } int i = 0, j = 0;//i指向无重复字符子串的第一个位置,j指向无重复字符子串的最后一个字符d的后面一个位置 int max =1;/...//每次新加入一个元素,就把新加入的元素与前面字符串进行比较,确保没有与前面字符串中某个字符重复 //如果当前j指向的字符和子串中某个字符重复,就把i移动到j的位置 //将新加入的字符与前面的无重复子串进行比较...,如果比max大,就更新max的值为maxnum if (maxnum > max) max = maxnum; } return max; } }; void test()

    58920

    无重复字符的最长子串

    JavaScript实现LeetCode第3题:无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。...示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...解题思路 这是一道动态规划题目 1.声明两个变量 currentString:当前无重复字符的子串, max:无重复字符的最大子串长度 2.判断当前的最长串中是否有该字母s[i], 如果没有,则加上s[...i], 如果有,则需要从重复的位置断开,开始新的计算 计算该次循环出现的无重复字符的最大子串长度 解题方案 /** * @param {string} s * @return {number} *

    81420

    无重复字符的最长子串

    1.题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...2.2图解 计算完第一个字符,目前无重复字符的最长子串是a,所以l=1 计算完第二个字符,目前无重复字符的最长子串是ab,所以l=2 计算完第三个字符,目前无重复字符的最长子串是abc,所以l=3 计算完第四个字符...,删除a,以及a之前的字符,目前无重复字符的最长子串是bca,所以l=3 计算完第五个字符,删除b,以及b之前的字符,目前无重复字符的最长子串是cab,所以l=3 计算完第六个字符,删除c,以及c之前的字符...,目前无重复字符的最长子串是abc,所以l=3 计算完第七个字符,删除b,以及b之前的字符,目前无重复字符的最长子串是cb,所以l=2 计算完第八个字符,删除b,以及b之前的字符,目前无重复字符的最长子串是...定义一个 map 数据结构存储 (k, v),其中 key 值为字符,value 值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复 我们定义不重复子串的开始位置为 start,结束位置为

    71010

    Leetcode 无重复字符的最长子串

    无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 我的思路 & 实现 使用两个指针,分别为头指针和尾指针。...头指针指向无重复字符子串头部,一个指向子串尾部,初始时,两个指针都指向字符串第一个元素。...查找效率高),存放当前子串已有元素 尾指针检查当前所指元素是否在当前子串中出现过(查找哈希表中是否有当前元素),如果不存在,将当前元素存入哈希表,尾指针后移,并更新最大长度;如果存在,说明已经找到了一个无重复字符的子串...优化 优化了之前的代码,性能大大提高 之前的代码在找到一个无重复字符子串后,采用make重新创建一个map的方法来清空原map,这个操作是费时的 由于采用了创建新的map来清空map,导致尾指针在寻找下一个无重复字符子串时需要返回到与头指针一样的位置...,这样就多了不必要的遍历,以及往map中添加元素的操作,很费时 在已经找到一个无重复字符子串之后,在头指针右移的过程中,同时删除map中相关的元素 这样就不需要新创建一个新map,也大大减少空间复杂度,

    14930

    LeetCode无重复字符的最长子串

    什么是子串 串中任意个连续的字符组成的子序列称为该串的子串 对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符串。...ab的子串:a、b、ab和一个空子串共4个即(2+1+1)个,abc的子串:a、 b、 c、 ab、 bc 、abc和一个空子串 共(3+2+1+1)个,所以若字符串的长度为n,则子串的个数就是[n*(...什么是子序列 子数列,又称子序列,在数学中,某个序列的子序列是从最初序列通过 去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。 “AC”是“ABCDEFG”的子序列,而不是子串。...言归正传题目中还有两个关键字不含有重复字符和最长 这里采用数组的方法,定义一个空队列,判断是否存在字符,如果重复则截取数组,如果不存在往定义好的队列里添加。...第一种写法:这里采用Math.max()的方法获取最大值,但是要考虑一种边界值就是如果s=""这种情况。还有一个小细节:s=" "则s.length=1。 ?

    65220

    求解无重复字符的最长子串

    定义一个map数据结构存储(k,v),其中key值为字符,value值为字符位置+1,加1表示从字符位置后一个才开始不重复 我们定义不重复子串的开始位置为start,结束位置为end 随着end不断遍历向后...,会遇到与【start,end】区间内字符相同的情况,此时将字符作为key值,获取其value值,并更新start,此时【start,end】区间内不存在重复字符 无论是否更新start,都会更新其map...char element=s.charAt(end); if (map.containsKey(element)){ //为了防止连续重复字符...,这里要进行一次判断 //+1表示该元素后一个元素才是不重复字符串的开始 start=Math.max(map.get(element)+...1,start); } max=Math.max(max,end-start+1); //保存最后一个该结点的位置;

    28020

    无重复字符的最长子串问题

    2·1c语言解法: 思路(应用滑动窗口和简单哈希表); 滑动窗口:左右两个指针,右边走一个,判断对应的值与窗口内的是否有重复,没有直接把其纳入窗口 否则就是有重复,左指针走到重复的位置+1,相当于把重复的值排出窗口...(也可以用左右指针,右套左for循环完成,可以避免本题left左指针多次移动,可以直接给左指针赋位置) 简单哈希表:将原数组对应的值按哈希数组下标存入,方便计算数组内原值出现次数。...此题思路:定义好左右指针,然后右指针走,hash数组此下标位置对应数字为0就接着放,否则,动左指针 依次删除放入的数据,直到走到重复的下一个位置,则窗口就无重复数据,接着右指针再动,持续操作,直到右指针越界...c++对本题思路: 滑动窗口+hash表:可以理解为hash内的值即right-left+1;也就是ret,因此只要找到重复字符,也就是说left一定要更新即右移 但是优化掉不可能的结果即left可直接跳到第一个重复数后面的一个...,移动完left位置的这个循环即出窗口过程 下面就是更新结果是在出窗口之前更新还是之后更新,这道题选择的是后者,因为如果是之前的话那么反而找到重复的字符,它就会相对真正的大一。

    5910

    LeetCode - 无重复字符的最长子串

    示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。...:从头往后遍历,判断当前的字符是否在当前的StringBuilder字符子串中,如果不在就添加进字符子串里面,否则判断当前字符子串的长度和之前的最长字符子串长度,取最大值; 现在的想法是,不用StringBuilder...,直接用HashSet,保证无重复,减少StringBuilder.indexOf的时间消耗;比较最长的长度时,直接获取HashSet.size(); 个人题解:

    42940

    python 无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3  解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。     ...无重复字符的最长子串 30. 串联所有单词的子串 76. 最小覆盖子串 159. 至多包含两个不同字符的最长子串 209. 长度最小的子数组 239. 滑动窗口最大值 567....针对003 无重复字符的最长字串,参考如上答案,C++版本。编者很辛苦,没有给出具体解释,我想说出自己的一些想法。 1.对于大多数人比较纠结的一点 while (lookup.find(s[i]) !

    2.2K20
    领券