int lengthOfLongestSubstring(string s)
{
// write your code here
unordered_map<char,int> m;
int start =1,res=0;
for(int i=1;i<=s.length();i++)
{
char str = s[i-1];
if(m[str]>=start)
{
start = m[str]+1;
m[str] = i;
}
else
{
m[str] = i;
res = max(res,i-start+1);
}
}
return res;
}
思路:遍历字符串,如果不相同,更新距离,(注意:无论是否出现重复都把当前索引赋给当前字符,是为了判断是否在start 后边出现重复的条件);如果出现相同,(即当前字符的索引大于等于start),就更新start 成为一个新字符串的开始!(例如:abcdbc 开始的时候start = 1,当第二个b出现的时候start = 3 即字母c所在的位置索引)