给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
解法:滑动窗口,left指向窗口的最左端,然后右边依次遍历。
注意是st.erase(s[left]),因为滑动窗口缩小是把left移出窗口。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len = s.length();
if (len == 0) {
return 0;
}
int ret = 0;
int left = 0;
std::unordered_set<char> st;
for (int i = 0; i < len; ++ i) {
while (st.find(s[i]) != st.end()) {
st.erase(s[left]);
++ left;
}
st.insert(s[i]);
ret = max(ret, i - left + 1);
}
return ret;
}
};