leetcode3 无重复字符的最长子串

题目

无重复字符的最长子串

分析

典型的滑动窗口题目。

一个窗口用两个指针left,right来维护,不断移动right指针,right指针的位置只有两种情况:

  1. [left,right)的这个窗口里没有right指针指向的字符,那么那么就继续移动right指针
  2. [left,right)的这个窗口里有right指针指向的字符,那么就将left指针移动到这个重复出现的字符的下一个位置。

代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if (s.empty()){
            return 0;
        }

        int start = 0, res = 1;
        unordered_map mp;
        mp[s[0]] = 0;

        for (int i = 1; i < s.size(); i++){
            if (mp.count(s[i]) != 0 && mp[s[i]] >= start){
                start = mp[s[i]] + 1;
            }
            mp[s[i]] = i;
            res = max(res, i - start + 1);
        }

        return res;
    }
};

你可能感兴趣的:(leetcode3 无重复字符的最长子串)