不重复字符串

32 阅读1分钟

对于不重复的字符串问题,主要难点在于采用滑动窗口和集合的灵活运用

  1. 首先i作为左指针,逐步向左移动,每移动一次,就把前面的从集合里面移走。
  2. 然后设置rk为右指针,逐步遍历。
  3. 如集合里面无当前元素,且指针在该字符串的长度范围内,则将该元素插入,继续移动。
  4. 输出imax。
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
    int n=s.size();
    set<char> occ;
    int imax=0;
    int rk=-1;
    for(int i=0;i<n;i++)
    {
        if(i!=0)
        {
            occ.erase(s[i-1]);
        }
        while(rk+1<n && !occ.count(s[rk+1])){
            occ.insert(s[rk+1]);
            rk++;
        }
        imax=max(imax,rk-i+1);
    }
    return imax;
    }
};