首页
学习
活动
专区
圈层
工具
发布

【LeetCode02】找出不含重复字符的 最长子串 的长度

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb"输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...示例 3: 输入: "pwwkew"输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。...这道题,一开始最直接的想法就是暴力法,直接穷举所有的子串,然后选择无重复的子串中最长的那个。...s[i]存在于集合Lookup中,如果是的话,重复步骤4),直到右端元素s[i]不存在于集合Lookup中,然后判断当前窗口长度cur_len是否大于max_len,是的话就更新max_len 6 )循环回步骤

1.9K10

计算不含重复字符的最长子串的长度 #算法#

给出一个字符串,计算没有重复字符的最长子串的长度。...思路 从左向右扫描,如果下一字符在之前没有出现过,则继续下去,直到一个重复字符的出现,计算到这里之前的子串的长度,然后继续从该位置向右扫描,继续寻找是否有更长的符合条件的子串,但是下一子串的开头就必须从刚才那个重复字符出现过的位置的下一位置开始...比如abcad,一开始依次扫描abc,然后到a的时候发现重复了,于是计算当前子串abc长度为3,继续刚才的扫描,下一字符是d,然后结束;因为第一次的时候a是重复字符,所以计算第二个子串长度时应该从b开始...但是这样会带来问题,就是如何在识别下一个子串时恢复所有字符的状态,还有如何计算子串的长度。 一种方式是数组对应元素记录该字符在子串中的位置,并在每次遇到一个新子串时记录长度,并更新位置。...,若字符最近出现的位置在subStart的右边,说明已经重复。

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

    算法创作|力扣题—返回不重复字符的最长字串长度

    给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...示例 2:输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 解决方案 对于本道题,题意很简单,“不重复”和“最长字串”抓住这两个关键字眼。...所以在一串给定得字符串中,通过循环的方式让后面和前面的字符进行对比。对于无顺序比较,这里我们采用set()函数,无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。...最后将不重复字符串用len()函数进行计算长度。在一系列过程中用到了for循环,if条件语句,sorted()函数。 接下来展示完整的代码。...图2.1 结语 对于本次这个题目,在于循环的使用和条件语句,一些缩进的注意,缩进容易导致很多错误,还有就是本题用到的函数比较多,所以要很好的利用好每一个函数。

    72520

    Java实现给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。...请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。...题解 : 有点难度哈: 1 开一个哈希集合(不能有重复key) 2 开一个 头指针 尾部指针 和最大值长度ans 3 头指针不断后移, 不断往集合里面塞元素( 如果遇到集合里面有的key...,更新key的Value ,+1 ,因为+1 是为了让start头指针移到重复元素后面的那个元素上) 4 更新 最大长度 ans (通过比较 头尾指针之差+1 和 ans 取最大值)

    1.1K10

    如何找出给定字符串中不含有重复字符的最长子串?

    例如,给定字符串str为abcabcbb 不含有重复字符的最长子串为abc 首先分析下 1. 要确定一个字串,就要确定这个子串的起止位置. 2....遍历字符串,当有字符重复时,移动起始位置指针,从指针位置开始到当前遍历下标位置就是一个新的无重复字符的字串. 5. 重新记录重复元素的下标....这个要查找的最长字串便称作滑动窗口,时间复杂度为O(n),下面用几个图说明下. 1.起始状态,滑动窗口的起始指针start和字符串遍历指针i都指向0; 2.移动指针i,并将遍历过元素记录到HashMap...中,便于比对. 3.当指针i移动到第二个[a]元素时,判断出元素重复; 为判断出最长字串,需要对比并记录此时最大滑动窗口; 需要重新调整滑动窗口的起始指针start,调整HashMap中元素下标值;继续遍历.... 4.遍历结束时,记录下的最大滑动窗口位置就是求得的无重复字符的最长字串.

    1.3K10

    最长的连续元素序列的长度

    题目描述 给定一个无序的整数类型数组,求最长的连续元素序列的长度。 例如: 给出的数组为[100, 4, 200, 1, 3, 2], 最长的连续元素序列为[1, 2, 3, 4]....返回这个序列的长度:4 你需要给出时间复杂度在O(n)之内的算法 思路: 先排序,记住三个数 int count=1;//当前连续序列长度 int last=num[0];//上一个数字(连续判断条件...) int max=1;//前面最大的连续序列长度 做的时候搞错了一个点,就是1,1,2,3,算连续三个,我算成连续四个了,后来改掉了 代码: public int longestConsecutive...(int[] num) { // 给定一个无序的整数类型数组,求最长的连续元素序列的长度。...// 例如: // 给出的数组为[100, 4, 200, 1, 3, 2], // 最长的连续元素序列为[1, 2, 3, 4].

    1.1K30

    LeetCode 209:最小长度的子数组 Minimum Size Subarray Sum

    算法是一个程序的灵魂 公众号:爱写bug(ID:icodebugs) 作者:爱写bug 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。...Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray...示例: 输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。...进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。...解题思路: 这里我们一步到位,直接用 O(n log n) 时间复杂度的解法。 我们定义两个指针i、j,i 指向所截取的连续子数组的第一个数,j 指向连续子数组的最后一个数。

    87360

    无重复字符的最长字串

    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之间的子串。

    1.2K30

    替换后的最长重复字符

    替换后的最长重复字符 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换k次。在执行上述操作后,找到包含重复字母的最长子串的长度。...输入:s = "AABABBA", k = 1 输出:4 解释: 将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。 子串 "BBBB" 有最长重复字母, 答案为 4。...维护maxn一直是最大值 // 窗口长度只能增大或者不变 left指针只移动了0/1次 // 这样做的意义是我们求的是最长,如果找不到更长的维持长度不变返回结果不受影响...,就直接以官方的思路做个解释,我们可以枚举字符串中的每一个位置作为右端点,然后找到其最远的左端点的位置,满足该区间内除了出现次数最多的那一类字符之外,剩余的字符(即非最长重复字符)数量不超过k个,这样我们可以想到使用双指针维护这些区间...,每次右指针右移,如果区间仍然满足条件,那么左指针不移动,否则左指针至多右移一格,保证区间长度不减小,这样做的意义是我们求的是最长,如果找不到更长的维持长度不变返回结果不受影响,当我们右指针移动到尽头,

    1.7K20

    LeetCode 209:最小长度的子数组 Minimum Size Subarray Sum

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。...Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray...示例: 输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。...进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。...解题思路: 这里我们一步到位,直接用 O(n log n) 时间复杂度的解法。 我们定义两个指针i、j,i 指向所截取的连续子数组的第一个数,j 指向连续子数组的最后一个数。

    60550

    LeetCode 209:最小长度的子数组 Minimum Size Subarray Sum

    公众号: 爱写bug(ID:icodebugs) 作者:爱写bug 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。...Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray...示例: 输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。...进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。...解题思路: 这里我们一步到位,直接用 O(n log n) 时间复杂度的解法。 我们定义两个指针i、j,i 指向所截取的连续子数组的第一个数,j 指向连续子数组的最后一个数。

    73420

    LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium

    解题思路:   这个题让找一个字符串中具有不重复单词的最长子串的长度,如:ababc,子串为abc,长度为3。有这么几个方法: 方法一:   依赖字符串本身的一些特有函数,进行相应操作来完成。...我们可以维护一个子串,来保存最长的无重复的子串,并记录当前子串的长度,如果遇到重复的字符,则去掉子串中重复的字符,一次进行下去,最终就能找到最长无重复子串。...如str = ababc, substr = a, ab, ba, ab, abc....类似这样的思路。...++; } if (len > nMaxLen) nMaxLen = len; return nMaxLen; } 方法二:   指针法:用一个指针指向字符串的左边界...,如果遇到重复的字符,就往后移动,同时用一个有26位的字符数组(因为总共就26个字符)来保存每一个字符最近一次出现的位置,以此来更新指针位置和字符位置之间的距离,就可以算出最长无重复字符的长度,如下代码所示

    72070
    领券