输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
思路:
滑动窗口: 1. 定义start 下标和end 下标,
2. end 向后移动,只要哈希表中有重复的数据,start 移动到 重复位置的后一个位置
3. 当有重复的时候,记录每段长度,并比较
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int start = 0;
int end = 0;
int length = 0;
int res = 0;
unordered_map<char, int> hash; //将下标存起来,键值为字符
while(end < s.size()) {
char curChar = s[end];
if (hash.find(curChar) != hash.end() && hash[curChar] >= start) {
// hash 中有存在的字符
start = hash[curChar] + 1;
length = end - start;
}
hash[curChar] = end;
end++;
length++; // 防止没有重复字符的情况。 因为这里加1了,所以if 中计算长度的时候,没有加1
res = max(res, length);
}
return res;
}
};