zoukankan      html  css  js  c++  java
  • 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;
          
        }
    };
  • 相关阅读:
    EOJ二月月赛补题
    cf401d
    cf628d
    cf55d
    HDU 6148 Valley Number
    洛谷 P3413 SAC#1
    洛谷 P4127[AHOI2009]同类分布
    洛谷 P2602 [ZJOI2010]数字计数
    bzoj 3679
    函数和循环闭包的理解
  • 原文地址:https://www.cnblogs.com/zhang12345/p/15341681.html
Copyright © 2011-2022 走看看