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

无重复字符的最长子串“Leetcode递归解决方案不起作用

无重复字符的最长子串是一个经典的算法问题,要求找出给定字符串中最长的不包含重复字符的子串的长度。

对于该问题,可以使用滑动窗口的思想进行解决。具体步骤如下:

  1. 定义两个指针,分别指向子串的起始位置和结束位置,初始时起始位置和结束位置都为字符串的第一个字符。
  2. 使用一个哈希集合来记录当前子串中出现过的字符。
  3. 当结束指针遍历到字符串的末尾时,算法结束。
  4. 如果当前子串中的字符在哈希集合中不存在,表示该字符是一个新字符,将该字符加入到哈希集合中,并更新最长子串的长度。
  5. 如果当前子串中的字符在哈希集合中存在,表示出现了重复字符,此时需要将起始指针向右移动,直到将重复字符从子串中移除。
  6. 重复步骤4和5,直到结束指针遍历完整个字符串,记录下最长子串的长度。

下面是一个可能的实现代码:

代码语言:txt
复制
def lengthOfLongestSubstring(s):
    start = 0
    end = 0
    max_length = 0
    char_set = set()

    while end < len(s):
        if s[end] not in char_set:
            char_set.add(s[end])
            end += 1
            max_length = max(max_length, end - start)
        else:
            char_set.remove(s[start])
            start += 1

    return max_length

该算法的时间复杂度为O(n),其中n为字符串的长度。

该算法的应用场景包括字符串处理、文本分析、数据挖掘等领域。在实际开发中,可以使用腾讯云的云服务器、容器服务、函数计算等产品来支持算法的部署和运行。

注意:本回答中并未提及具体的腾讯云产品和产品介绍链接地址,请根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

LeetCode重复字符长子

LeetCode第三天 好不甘心,夏天就这么过去了 ,但是LeetCode之旅才刚刚拉开序幕。 题目 今天带来是第三题: ?...什么是子 中任意个连续字符组成子序列称为该 对于一个字符变量,例如"adereegfbw",它就是像"ader"这样可以从中找到连续字符。...字符"adereegfbw"本身也属于它本身最长。...ab:a、b、ab和一个空子共4个即(2+1+1)个,abc:a、 b、 c、 ab、 bc 、abc和一个空子 共(3+2+1+1)个,所以若字符长度为n,则子个数就是[n*(...言归正传题目中还有两个关键字不含有重复字符和最长 这里采用数组方法,定义一个空队列,判断是否存在字符,如果重复则截取数组,如果不存在往定义好队列里添加。

64820

Leetcode 重复字符长子

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

14430
  • LeetCode重复字符长子

    题目描述 给定一个字符,请你找出其中不含有重复字符长子 长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为重复字符长子是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为重复字符长子是 "b",所以其长度为 1。...示例 3: 输入: "pwwkew" 输出: 3 解释: 因为重复字符长子是 "wke",所以其长度为 3。...题目解析 这道题目标是找出最长子,并且该子必须不包含重复字符,而且这个子必须是原字符中连续一部分(见示例3中解释说明)。...拿到题目时先不要心急想什么骚操作,我们先从普通操作开始把题目解出来,然后再来看如何优化。

    1.1K10

    leetcode算法-重复字符长子

    给定一个字符,请你找出其中不含有重复字符长子 长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为重复字符长子是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为重复字符长子是 "b",所以其长度为 1。...System.out.println(Demo2.LengthOfLongestSubstring("ababedf")); } } 2、大佬解法 滑动窗口,通过使用 HashSet 作为滑动窗口,我们可以用 O(1) 时间来完成对字符是否在当前字符检查...滑动窗口是数组/字符问题中常用 抽象概念。 窗口通常是在数组/字符中由开始和结束索引定义一系列元素集合,即 [i, j)(左闭,右开)。而滑动窗口是可以将两个边界向某一方向“滑动”窗口。...此时,我们找到没有重复字符长子字符将会以索引 i开头。如果我们对所有的 i 这样做,就可以得到答案。

    1.3K20

    LeetCode(一)——重复字符长子

    题目: 题目:https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 题目大意: 在一个字符重寻找没有重复字母长子...思路: 采用滑动窗口思想进行解题,滑动窗口右边界不断右移,只要没有重复字符,就持续向右扩大窗口边界;一旦窗口内出现了重复字符,就需要缩小左边界,直到重复字符移出了左边界,然后继续移动滑动窗口右边界...注意点: 无论有无重复字符,右边界都会向右持续移动 重复字符出现在窗口内idx>=left,才需要进行滑动左边界,如果出现在窗口外,就不要滑动左边界。...make(map[byte]int) for right < len(s) { if idx, ok := indexes[s[right]]; ok { // 这里需要注意,只有重复字符在窗口内部才需要滑动左边界

    17830

    leetcode-3. 重复字符长子

    求真正长度时要 +1,用三目运算判断当前最长与已记录长子比较且重新定义最长子,可能还是原来最长,也可能是当前子最长 max = max > (i - start...max : (i - start + 1); } // 返回遍历后最终最长子 return max; } } 题解分析   这道题要明确一点是求最长子而不是最长子序列...先对传进来字符长度进行判断,若传进来字符长度小于等于 1,则直接返回其长度即可,定义开始指针位置,以及初始化最长字串记录值,并将字符转换为字符数组。...每两次循环执行完后都要让当前字串长度与已记录长子长度进行比较,由于 start 从 0 开始,求真正长度时要 +1,用三目运算判断当前最长与已记录长子比较且重新定义最长子,可能还是原来最长...待遍历完成后记录最长字串即为所求,返回即可。 leetcode原题:3. 重复字符长子

    18940

    LeetCode-3 重复字符长子

    重复字符长子 > 难度:中等 > 分类:字符 > 解决方案:双指针、滑动窗口 LeetCode前几道题都是经典题,今天我们学习第3题重复字符长子,这道题在秋招面试中遇见过,再次相遇...示例1: 输入: "abcabcbb"输出: 3 解释: 因为重复字符长子是 "abc",所以其长度为 3。...示例2: 输入: "bbbbb"输出: 1解释: 因为重复字符长子是 "b",所以其长度为 1。...Github地址 LeetCode-3 重复字符长子:https://github.com/JacobLei/leetcode/blob/master/src/main/java/A3_LongestSubstringWithoutRepeatingCharacters.java...参考链接 重复字符长子:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution

    41630

    重复字符长子

    今天和大家分享题目是,给定一个字符,找出不含有重复字符长子长度。具体示例如下。...比如:“abcabcbb”找到是“abc”,长度为3,而“bbbbb”找到是“b”,长度为1,那么“abcabwbbd”字符是什么? 小伙们想一想,这道题应该怎么解决呢?...我思路是这样: 1.首先通过定义函数方法来解决; 2.将所有符合题目要求字符放在一个空列表中; 3.定义两个参数,参数i作用是在给定字符个数范围内遍历取值; 4.参数j作用是,检测当前字符是否已经在字典中存在索引...,如有检测到已经保存有索引并且索引值大于等于子起始位置,则表明移动j时,和i之间出现了重复字符,此时对比子长度,并保留大长度。...语法是:str.join(sequence),sequence——要连接元素序列。 返回值:返回通过指定字符连接序列中元素后生成新字符

    64530
    领券