题目链接
题目截图:
基本思路:
我们可以从中发现我们当我们开始的起点越靠后,与其发生冲突的终点越靠后,拿lf代表左边起点,rg代表右边终点时,若lf1<lf2,那么rg1<=rg2(这里是有一个等号的)。同时我们利用set来判断我们的窗口,也就是rg和lf之间的部分当中是不是有重复部分,若有删除起点,同时起点向后移动。
函数实现代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char,int>p;
int ans=0,sz=s.size();
int conflict=0;
for(int i=0;i<sz;i++){
map<char,int>::iterator f=p.find(s[i]);
if(f==p.end()){
p[s[i]]=i;
}
else{
ans=max(ans,i-conflict);
conflict=i;
}
}
return ans;
}
};