c++滑动窗口学习心得

c++滑动窗口学习心得,第1张

c++滑动窗口学习心得

滑动窗口简介:
就是保持一个固定长度的窗口,每次滑动一个位置;

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

示例 1:

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

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例 4:

输入: s = “”
输出: 0

解题:

  • 题目含义
    这道题的意思就是给定一个字符串,然后要求你在这个字符串找到一个最长的连续不重复元素子串。
  • 题目解法:
    定义一个n,l,max,i,j;
    • n:表示字符串的长度
    • l:表示滑动窗口起点
    • max表示最大的连续不重复元素长度
    • i表示遍历数组指针
    • j表示遍历滑动窗口指针
    • 采用二重循环,每扫描一个元素(第一重),就判断是否在已有的滑动窗口内(第二重),如果在,就判断当前的滑动窗口长度是否大于max,如果大于max,就将滑动窗口的长度赋值给max,并将l赋值为第一个重复元素的下一个位置,也就是j+1,并跳出二重循环。
    • 注意:最后返回的应该是max>(i-l)?max:(i-l);(字符串本身就是最长连续不重复)

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n=s.size();
        int l=0,max=0,i=0;
        for(;i(i-l)?max:(i-l);
                    l=j+1;
                    break;
                }
            }
        }
        return max>(i-l)?max:(i-l);
    }
};

1=============
2=============
3=============

例题2:
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。

换句话说,s1 的排列之一是 s2 的 子串 。

示例 1:

输入:s1 = “ab” s2 = “eidbaooo”
输出:true
解释:s2 包含 s1 的排列之一 (“ba”).
示例 2:

输入:s1= “ab” s2 = “eidboaoo”
输出:false

提示:

1 <= s1.length, s2.length <= 104
s1 和 s2 仅包含小写字母

  • 题目含义
    给你两个字符串s1,s2,在s2中判断是否有一个子串的排列与s1相等,如果有返回true,否则返回fasle。
  • 题目解法
    • 此题目说的是子串排列是否和s1相等,也就是说不用考虑顺序,只需考虑子串中的每个字符数量是和s1中的相等即可。那么就可以固定一个存储s1大小的容器来滑动s2,如果当前的滑动框内字符和s1中的不相等,那么就向右滑动一个位置,新的字符加一,而滑动框左边那个位置的字符减一。
    • 可以定义两个vector容器(26)v1,v2,先用v1去遍历s1,v2去遍历s2(遍历s1的长度即可)把对比字符数量扫入,这里可以用字符-'a’把它转成整型,即对应下标为当前字符-'a’这个位置+1。

代码:

class Solution {
public:
    bool checkInclusion(string s1, string s2) {
        vector v1(26),v2(26);
        int n=s1.size(),m=s2.size();
        if(n>m) return false;
        for(int i=0;i					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3971640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存