3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ans = 0;
int n = s.size(); //s的长度
map<char,int> m; //字符char所处的位置为int
for(int a = 0, b = 0; a < n; a++){
if(m.count(m[a])){
b = max(m[s[a]],b);
}
ans = max(ans, a - b + 1);
m[s[a]] = a + 1;
}
return ans;
}
};
解答:滑动窗口:首先定义一个哈希表记录窗口中的元素,然后定义两个指针a和b,指针a往前跑如果a遇到了重复的元素那么b就到这个重复元素的下一个元素然后a继续往前跑,将ans作为中间变量直至遍历完整个字符串然后就得到了ans的最大值。