最长不重复子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
滑动窗口
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
int length = s.length();
int res = 0;
vector<int> index(128);
for (int i = 0, j = 0; j < length; j++)
{
i = max(index[s[j]], i);
res = max(res, j - i + 1);
index[s[j]] = j + 1;
}
return res;
}
};
//解析
//abcabdab
/* a b c a b d a b
i 0 0 0 1 2 2 4 5
j 0 1 2 3 4 5 6 7
res 1 2 3 3 3 4 4 4
a 1 0 0 4 4 4 7 7
b 0 2 1 1 5 5 5 8
c 0 0 3 2 2 2 2 2
d 0 0 0 0 0 6 5 5
退出 res = 4
*/