思路一:哈希表记录每个字符最后一次出现的位置

  1. int lengthOfLongestSubstring(string s) {
  2. if(s.empty())return 0;
  3. int n = s.length();
  4. vector<int> index(256, -1);
  5. int begin = -1, maxlen = 0;
  6. for(int i = 0;i < n;++i){
  7. begin = max(index[s[i]], begin);
  8. maxlen = max(maxlen, i - begin);
  9. index[s[i]] = i;
  10. }
  11. return maxlen;
  12. }

思路二:滑动窗口

    int lengthOfLongestSubstring(string s) {
        int left = 0, right = 0, len = s.length(), maxLen = 0;
        unordered_map<char, int> m;
        while(right < len){
            char c1 = s[right];
            ++m[c1];
            ++right;
            while(m[c1] > 1){
                char c2 = s[left];
                --m[c2];
                ++left;
            }
            maxLen = max(maxLen, right - left);
        }
        return maxLen;
    }