https://leetcode.cn/problems/wtcaE1/
https://leetcode.cn/problems/longest-substring-without-repeating-characters/
难度:☆☆☆
题目:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
示例:
输入: s = “abcabcbb”
输出: 3
输入: s = “bbbbb”
输出: 1
方法:字符串,滑动窗口【不定宽】
Python
时间复杂度O(n)。
空间复杂度O(n)。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 本题最大特点就是滑动窗口宽度会变,即left和right不是同时右移。
left, right = 0, 0 # 定义窗口左端索引、右端索引
lens = len(s)
window = set() # 定义窗口,本题窗口不是list,而是一个set
ans = 0
while right < lens:
# 开始滑动窗口
# right先行,将字符一个个放入集合中,并记录长度
# 如果发现当前字符在集合中存在,开始移动left,直到该字符被剔除集合
c = s[right]
while c in window:
window.remove(s[left])
left += 1
window.add(c)
ans = max(ans, right - left + 1)
right += 1
return ans
Java
时间复杂度O(n)。
空间复杂度O(n)。
class Solution {
public int lengthOfLongestSubstring(String s) {
int left = 0, right = 0, ans = 0;
int lens = s.length();
Set<Character> window = new HashSet<>();
while (right < lens) {
char c = s.charAt(right);
while (window.contains(c)) {
window.remove(s.charAt(left));
left++;
}
window.add(c);
ans = Math.max(ans, right - left + 1);
right++;
}
return ans;
}
}
标签:right,LCR,主站,while,window,016,ans,复杂度,left
From: https://blog.csdn.net/weixin_43606146/article/details/143786185