借用了leetcode上的答案,自己还是太菜了,这里dict的长度为256是由于ASCII码总共能表示256个字符。
class Solution {
public:int lengthOfLongestSubstring(string s) {
vector<int> dict(256, -1);
//start表示初始位置,i表示结尾位置
int maxLen = 0, start = -1;for (int i = 0; i != s.length(); i++) {
//正常情况下dict[s[i]]是不可能大于start的,唯一的机会就是s[i]是一个与之前字符重复的字符,这种情况下需要把初始位置start移动到该重复字符的位置然后继续进行
if (dict[s[i]] > start)
start = dict[s[i]];
dict[s[i]] = i;
maxLen = max(maxLen, i - start);
}
return maxLen;
}
};