题意:
给出一个字符串(长度为5e4),求没有重复字符的最长连续串。
思路:
由于长度为5e4,考虑
O
(
n
)
O(n)
O(n)的遍历。
用map存储在当前位置之前该字符的最后一次出现的位置是第几个。
las表示如果以当前字符串为结尾,能够保证不重复的位置。
i-las+1就是以当前字符串结尾的答案。
取最大值就好了。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ans=0,las=0;
//s=" "+s;
map<char,int>mp;
for(int i=0;s[i];i++){
las=max(las,mp[s[i]]);
mp[s[i]]=i+1;
ans=max(ans,i-las+1);
// cout<<i<<"****"<<las<<"*****"<<ans<<endl;
}
return ans;
}
};