Leetcode 3. 无重复字符的最长子串
3. 无重复字符的最长子串
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串的长度。示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc"
,所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
🔹设计时间复杂度为O(n)的算法解决问题
🔸解题思路
1.创建一个 Set数据结构numSet
set可以去重避免排序时有重复数字出现
用Set记录字符出现的情况
2.left,right=0,0表示左右指针滑动窗口的边界
ans=0记录无重复最长子串的长度
3.判断当前字符是否在合集中出现
——如果没有在numSet出现过
当前字符加入numSet,更新最长子串长度
——如果在numSet出现过则缩小窗口
把左边界出现过的数去掉
左边界往右滑动,缩小窗口长度
4.最后返回最长子串长度
✨看小破站 UP主红桃A士 动画解说 秒懂
✨金三银四面试准备
✨leetcode hot100
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: numSet = set() left, right = 0, 0 ans = 0 while right < len(s): if s[right] not in numSet: numSet.add(s[right]) ans = max(ans, right - left + 1) right += 1 else: numSet.remove(s[left]) left += 1 return ans if __name__ == '__main__': a = Solution() s = 'abcabcbb' print(a.lengthOfLongestSubstring(s))
声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/
如出现转载未声明 将追究法律责任~谢谢合作