首页 > 其他分享 >滑动窗口

滑动窗口

时间:2023-05-09 18:35:17浏览次数:34  
标签:right 窗口 String valueOf window need 滑动

1. 总述

滑动窗口解题逻辑比较清晰,一般需要维护两个map,一个用于初始化已知的子串,另一个用作窗口,步骤如下:

  • 扩大窗口(注意扩大窗口的条件
  • 窗口内数据更新(window窗口)
  • 缩小窗口 (注意缩小窗口的条件
  • 窗口内数据更新

2. 以LeetCode76 最小覆盖子串为例

public String minWindow(String s, String t) {
        HashMap<String, Integer> need = new HashMap<>();
        HashMap<String, Integer> window = new HashMap<>();

        for (char c : t.toCharArray()) {
            need.put(String.valueOf(c), 1);
        }

        int left = 0, right = 0;
        int valid = 0;

        // 记录最小覆盖子串的起始索引及长度
        int start = 0, len = Integer.MAX_VALUE;

        while (right < s.length()) {
            // c 是将移入窗口的字符
            char c = s.charAt(right);
            // 扩大窗口
            right++;
            // 进行窗口内数据的一系列更新
            if (need.containsKey(String.valueOf(c))) {
                window.put(String.valueOf(c), window.getOrDefault(c, 0) + 1);
                if (window.get(String.valueOf(c)).equals(need.get(String.valueOf(c)))) {
                    valid++;
                }
            }

            // 判断左侧窗口是否要收缩
            while (valid == need.size()) {
                // 在这里更新最小覆盖子串
                if (right - left < len) {
                    start = left;
                    len = right - left;
                }
                // d 是将移出窗口的字符
                char d = s.charAt(left);
                // 缩小窗口
                left++;
                // 进行窗口内数据的一系列更新
                if (need.containsKey(String.valueOf(d))) {
                    if (window.get(String.valueOf(d)).equals(need.get(String.valueOf(d)))) {
                        valid--;
                    }
                    window.put(String.valueOf(d), window.get(String.valueOf(d)) - 1);
                }

            }
        }
        // 返回最小覆盖子串
        return len == Integer.MAX_VALUE ? "" : s.substring(start, start + len);

    }

标签:right,窗口,String,valueOf,window,need,滑动
From: https://www.cnblogs.com/zoomingxu/p/17385920.html

相关文章

  • VS窗口属性
    窗口去边框:背景颜色和背景图片:字体款式,颜色,图标:窗口大小,传输值,和文本值:按钮:边框颜色,边框类型:添加图片,图片位置:文本值的位置:文本框调节大小:表:行的高度,要修改第二个,AutoSize是自动调节,和字体高度一样修改列标题边框颜色:列标题边款样式:使用当前主题颜色样式,......
  • 【工具类】线程安全的滑动时间窗口记录工具类
    闲来无事,分享一个工具类,写的不好,轻喷,欢迎指出问题目标是线程安全无锁高性能的记录滑动时间窗口值importlombok.Getter;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.TimeUnit;importjava.util.conc......
  • QT设置窗口边框圆角
    1.直接设置样式  setStyleSheet("border:5pxsolidred;border-radius:10px")2.this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明this->setWindowFlags(Qt::FramelessWindowHint);//设置无边框窗口 voidSystemWarnDialog::paintEvent(Q......
  • postman 的 console 窗口,助力 http 请求错误时的问题排查
    postman是个很不错的http请求测试工具,有时我们使用它发送http请求,但是因为各种原因,导致请求失败,没有response返回,可能只有一个状态码,这让我们排查起来非常困难,比如下图所示,请求一个接口后,看不到response,只能看到status是401unauthorized,字面意思是没权限。但是我明......
  • vant list列表 滑动加载
    瀑布流滚动加载,用于展示长列表,当列表即将滚动到底部时,会触发事件并加载更多列表项。importVuefrom'vue';import{List}from'vant';Vue.use(List);<van-listv-model="loading":finished="finished"finished-text="没有更多了"@load="onLoad&quo......
  • 滑动窗口最大值
    队列没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构(缺省为默认)deque容器 题目:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最......
  • delphi FastReport 自定义预览窗口显示报表
    FastReport自定义预览窗口显示报表属性和方法TfrxReport.PreviewpropertyPreview:TfrxCustomPreview;指向TfrxPreview组件的链接,在其中显示完成的报表。如果此属性为空,则在标准预览窗口中显示报表。TfrxPreviewTfrxPreview组件是为创建自定义预览窗口而设计的。要显......
  • KMPlayer4.0播放器,去除播放窗口右侧的广告
    一【问题】每次运行KMPlayer播放器去除播放窗口右侧的广告 二【去除方法】1、打开路径:C:\Windows\System32\drivers\etc 2.用记事本打开hosts编辑,,在末尾加入  0.0.0.0cdn.kmplayer.com,,最后保存三、再次运行KMPlayer播放器:  ......
  • 【WPF】-MVVM-封装窗口管理器解耦在ViewModel中弹出窗口
    一.在ViewModel层直接调用View弹出窗体如下图所示,这样做就发生了在ViewModel层直接使用了View,两者产生了耦合,ViewModel里是不应该包含View的,这不是我们期望的。 二.封装窗口管理器解耦在ViewModel中调用View2.1.封装窗口管理器延迟了对象的创建,先把类型(对象的模板)注册进来,......
  • 【数据结构】单调队列专题(滑动窗口问题)
    一维滑动窗口154.滑动窗口下标从0开始,数组模拟队列#include<iostream>usingnamespacestd;constintN=1e6+10;intn,k;inta[N],q[N];intmain(){scanf("%d%d",&n,&k);for(inti=0;i<n;i++)scanf("%d",&a......