题意:
给出一个字符串(长度为5e4),求没有重复字符的最长连续串。
思路:
由于长度为5e4,考虑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; } };