leetcode-滑动窗口

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

解题思路:使用两个指针作为窗口的两个边界,每进行一步操作,左指针就向右移动一个位置。右指针是窗口的又边界,判断下一个字符在set集合中的个数,如果个数为0,则将这个字符添加到set集合中,最后计算左指针和右指针之间字符的个数,选取最大值。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> occ;
        int n=s.size();
        int rk=-1;
        int ans=0;
        for(int i=0;i<n;i++){
            if(i!=0){
                occ.erase(s[i-1]);
            }
            while(rk+1<n && occ.count(s[rk+1])==0){
                occ.insert(s[rk+1]);
                rk++;
            }
            ans=max(ans,rk-i+1);
        }
        return ans;
      
    }
};
原文地址:https://www.cnblogs.com/zhang12345/p/15341681.html