这里先跳过力扣hot7啦,这几天就回更~
题目:
滑动窗口思路:
首先左窗口(left)指向的是第0个元素,依次遍历循环每一个元素,维护一个unordered_set,如果当前被遍历的元素存在于unordered_set,那就说明维护的窗口中有字符重复的情况,那咱这个左窗口就得向右移动,同时还得把窗口中重复元素以及左面的元素都去掉。
在遍历的过程中,需要将当下元素移入窗口,并且保持记录最大值。
代码如下:
C++:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len=s.size();
if(len==0){return 0;}
int cnt=0;
int left=0;
unordered_set<char> hset;
for(int i=0;i<len;i++){
while(hset.find(s[i])!=hset.end()){//找到了
hset.erase(s[left]);
left++;
}
hset.insert(s[i]);
cnt=max(cnt,i+1-left);
}
return cnt;
}
};
python:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
len_s=len(s)
if len==0:
return 0
cnt=0
left=0
hset=set()
for i in range(len_s):
while s[i] in hset:
hset.remove(s[left])
left+=1
hset.add(s[i])
cnt=max(cnt,i+1-left)
return cnt
注意python中 set 的写法:
- 创建set
hset=set()
- set添加元素
hset.add(s[i])
- set删除元素
hset.remove(s[left])