原题:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
用slide window只要一次遍历就可以求出结果,关键是需要创建一个序号数组,该数组保持字符上一次出现的下一个位置,默认为0。所以i指向的是上一次不重复出现的字符的位置,当字符重复出现后,其即指向下一个有效位置。j指向当前位置,j和i之间的子字符串就是不重复出现的子字符串。
代码:
int lengthOfLongestSubstring(string s) {
int n = s.size(), res = 0;
int index[256] = {0};
for(int i = 0, j = 0; j < n;j++){
// 如果s[j]没出现过,s[j] =0,否则应该指向上一次出现的下一个字符
i = max(i, index[s[j]]);
res = max(res, j - i + 1);
// 指向不重复的下一个字符
index[s[j]] = j + 1;
}
return res;
}