Hippogriff's Blog
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)

Absm

什么也不会
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)
  • 算法

  • 数据结构

  • Leetcode

    • 滑窗专题
      • 题目
      • 思路
        • 2.1 题目特征
        • 2.2 代码框架
      • 参考
    • 回文串专题
    • 剑指offer 07 重建二叉树
    • LCCUP 2021被虐
    • Leetcode 51 - N皇后
    • Leetcode 79 单词搜索
    • Leetcode 1577 数的平方等于两数乘积的方法数
    • Leetcode 5602 将 x 减到 0 的最小操作数
    • Leetcode 第243场周赛
    • Leetcode 全排列小专题
  • 算法
  • Leetcode
Absm
2021-03-14
目录

滑窗专题

# 滑窗专题(sliding window)

# 题目

题号 题目 难度
76 最小覆盖子串 (opens new window) Hard
567 字符串的排列 (opens new window) Medium
438 找到字符串中所有字母异位词 (opens new window) Medium
3 无重复字符的最长子串 (opens new window) Medium

# 思路

# 2.1 题目特征

这种题目的特征:

首先是在字符串(或数组)上,找某一段最长或最短满足要求的字符串(或数组),返回字符串(或数组)或其长度。

其中要求如果是无序的要求,则更容易让人想到滑窗,如果是有序反而容易让人想到字符串匹配(如KMP等)

# 2.2 代码框架

框架参考labuladong的思路:

/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {
    unordered_map<char, int> need, window;
    for (char c : t) need[c]++;

    int left = 0, right = 0;
    int valid = 0; 
    while (right < s.size()) {
        // c 是将移入窗口的字符
        char c = s[right];
        // 右移窗口
        right++;
        // 进行窗口内数据的一系列更新
        ...

        /*** debug 输出的位置 ***/
        printf("window: [%d, %d)\n", left, right);
        /********************/

        // 判断左侧窗口是否要收缩
        while (window needs shrink) {
            // d 是将移出窗口的字符
            char d = s[left];
            // 左移窗口
            left++;
            // 进行窗口内数据的一系列更新
            ...
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

整体的思路是,right右移的大循环套着left左移的循环。如果不满足条件,右侧的right就会一直扩张,否则left就会往右缩。

# 参考

【1】https://mp.weixin.qq.com/s/ioKXTMZufDECBUwRRp3zaA

编辑 (opens new window)
上次更新: 2021/06/03, 14:04:20
单调栈(二):实战篇
回文串专题

← 单调栈(二):实战篇 回文串专题→

最近更新
01
少年游·长安古道马迟迟
11-30
02
CMake基础命令
11-08
03
由浅入深剖析OAuth2.0的授权码模式
07-07
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Murray Li | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×