3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
解题思路: 此题考查滑动窗口。
注:滑动窗口解题的固定模式
设题目要求的条件为
f
(
x
)
f(x)
f(x),维持左边界和右边界,然后每次移动一个单位的右边界,check一下条件
f
(
x
)
f(x)
f(x)是否满足,如果不满足的话,那一直移动左边界,直到条件满足为止。在左边界和右边界移动的过程中,即可记录题目要求的最大/小窗口。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if (s.empty()) return 0;
int n = s.size(), i = 0, j = 0, res = 1;
unordered_map<char, int> m;
while (j < n) {
++m[s[j]];
if (s[j] >= 2) {
while (i <= j && m[s[j]] > 1) {
--m[s[i++]];
}
}
res = max(res, j - i + 1);
++j;
}
return res;
}
};