思路:滑动窗口
1.遍历字符串,维护一个滑动窗口,每遍历一个字符,保存窗口当中每个字符出现的位置。
2.如果新的字符没有在滑动窗口中出现,则直接加入滑动窗口,并保存其位置;否则将滑动窗口缩小,保证滑动窗口每个字符都只出现,也就意味着要清空某些字符的位置信息。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char,int> w;
int ans=0;
int cur_len=0;
for(int i=0;i<s.length();i++)
{
if(w.count(s[i])==0)
{
w.insert(pair<char,int>(s[i],i));
cur_len++;
}
else
{
for(int j=i-cur_len;j<w[s[i]];j++)
{
w.erase(s[j]);
}
cur_len=i-w[s[i]];
w[s[i]]=i;
}
ans=max(cur_len,ans);
}
return ans;
}
};