一、 题目
二、 示例
三、 思路与代码
1. 思路:
1. 采用滑动窗口算法;
2. 滑动窗口收缩的关键:
- 当当前移入窗口的字符其计数已经超过1时,则进行窗口的收缩;
3. 无重复子串长度更新的时机:当窗口中没有重复字符时, 更新长度;
4. 具体见代码解析;
2. 代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
const int INT_MIN_LEN = 0;
unordered_map<char, int> windows;
int left = 0;
int right = 0;
int s_len = s.size();
int ans_len = INT_MIN_LEN;
while (right < s_len) {
char c = s[right];
right++;
windows[c]++;
while (windows[c] > 1) {
char d = s[left];
left++;
windows[d]--;
}
ans_len = max(right - left, ans_len);
}
return ans_len;
}
};