问题:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度
思路1:
枚举每一个字符si,维持左指针left,代表最后一个重复的字符所在的位置,而且sbe+1~si-1之间没有重复的字符。
当cntsi>left时,我们会更新left=cnti,每次我们更新字符si所在的最大位置cntsi=i。每次我们会得到以第i个字符结尾的不重复字符的串的长度,每次取最大值就好了。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int s1=s.size();
if(s1==0)return 0;
vector<int>cnt(226,-1);
int ans=0,left=-1;
for(int r=0;r<s1;r++)
{
if(cnt[s[r]]>left)
{
left=cnt[s[r]];
}
cnt[s[r]]=r;
ans=max(ans,r-left);
}
return ans;
}
};
思路2: