int lengthOfLongestSubstring(string s) {
vector<int> pos(256,-1);
int left=-1,res=0;
for(int i=0;i<s.size();i++)
{
if(pos[s[i]] > left)
left=pos[s[i]];
if(i-left>res)res=i-left;
pos[s[i]]=i;
}
return res;
}
原本的想法是将s遍历,若s[i]与前面的字符不相等则res++,若相等则将相等位置的下一个记为start并重置res,这样的复杂度是O(n2),这个方法是将第二个循环的过程通过一个数组pos完成,将每个包含的字符的位置记录在数组中,若再次访问到pos[s[i]]则说明s[i]字符重复出现,这样进行操作可以省去一个循环。