个人主页:Lei宝啊?
愿所有美好如期而遇
滑动窗口其实就是种双指针,只是这种双指针只向后移动,不会回退,具有单调性,也就是说,整个过程中left和right只会++。
我们定义left和right为0,以及一个hash数组,将我们遍历过的字母全部填入,并且检测是否有超过1的,如果有,那么从left开始走的字母全部出hash表,直到超过1的那个字母不再超过1,我们看图解。
以此类推,不再往下画。
class Solution {
public:
int lengthOfLongestSubstring(string s)
{
int hash[128] = {0};
int len = 0;
for(int right = 0, left = 0; right < s.size(); right++)
{
hash[s[right]]++;
for(int i=0; i<128; i++)
{
if(hash[i] > 1)
{
while(hash[i] != 1)
{
hash[s[left++]]--;
}
}
}
len = max(len, right-left+1);
}
return len;
}
};