题意:给出一字符串,求不出现重复字母的子串的最大长度,例如:"bbbbb",最长为1;"abcabcab",最长为3。
分析:用dict[256]记录下每个字符出现的位置,定义两个索引start和end,end不断向后移动,start记录当前子串(start,end]的初始位置。判断接下来的字符s[end]是否出现过,若出现过(dict[s[end]]>start)则start移到(dict[s[end]])位置上,缩减子串的长度,若未出现过,则记录(dict[s[end]]=end),继续往后移。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> dict(256,-1);
int ans,start,end;
ans=0;
start=-1;
end=0;
while(end<s.size()){
if (dict[s[end]]>start)
start=dict[s[end]];
dict[s[end]]=end;
ans=max(ans,end-start);
end++;
}
return ans;
}
};