i相当于滑动窗口的尾,
j相当于滑动窗口的头,
m容器用于存储新加的字符的如果有相同,i的下一跳,
s 0 1 2 3 4 5 6 7
a b c a b c b b
m 1 2 3 4 5 6 7 8
比如进行到了 s的3456正准备进行6
还没进行前(i)ab(1)c(j)
后进行中 (i)ab(1)cb(2)(j)判断m中之前的b的记录,比i前所以i要跳到b(1)的下一跳i=5,并且记录b(2)的下一跳为7,比较现在的i与j的距离和之前最大的距离,取最大的距离存入ans中,以此循环,
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> m(128, 0);
int ans = 0;
int i = 0;
for (int j = 0; j < s.size(); j++) {
i = max(i, m[s[j]]);
m[s[j]] = j + 1;
ans = max(ans, j - i + 1);
}
return ans;
}
};
这个方法比昨天自己写的快很多很多,自己写的像小学水平......