这个题目超级搞,也不知道为啥缺少了map的判断键值条件dic.find(s[i])!=dic.end()
之后就会出错。最直接的就是只含有一个字符的字符串,它的最长子串会认定长度是0,直到现在也不知道为啥,只能说以后map还是尽量加上find(),防止出现一些诡异的错误。
然后贴一篇讲的很好的博客
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map <char,int> dic;
int maxLen = 0;
int start = -1;
for (int i = 0; i < s.length(); i++) {
if (dic.find(s[i])!=dic.end() && dic[s[i]] > start)
start = dic[s[i]];
//dic.find(s[i])!=dic.end() &&
//else
// maxLen = max(maxLen, i-start);
dic[s[i]] = i;
maxLen = max(maxLen, i - start);
}
return maxLen;
}
};