问题描述:
- 给定一个字符串
s
,找出其中不含有重复字符的最长连续子字符串的长度。s
由英文字母、数字、符号和空格组成。
核心思路:
- 仍然是滑动窗口经典应用题。
- 维护窗口中各字母的频数不大于
1
即可。
- 维护窗口中各字母的频数不大于
代码实现:
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
int m = s.size();
int l = 0, r = 0;
int len = 0;
unordered_map<int, int> cnt;
while(r < m)
{
++cnt[s[r++]];
while(cnt[s[r-1]] > 1) // l 达不到 r
--cnt[s[l++]];
len = max(len, r-l);
}
return len;
}
};