输入: 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 中计算长度的时候,没有加1res = max(res, length);}return res;}};
