【重点】【滑动窗口】76.最小覆盖子串

news/2024/5/20 10:10:20 标签: 最小覆盖子串, 滑动窗口

题目
思路参考《算法小抄》

class Solution {
    public String minWindow(String s, String t) {
        int startIndex = -1, endIndex = s.length(), valid = 0, left = 0, right = 0;
        char[] sArray = s.toCharArray();
        char[] tArray = t.toCharArray();
        int[] need = new int[256];
        int[] window = new int[256];
        Set<Character> set = new HashSet<>();
        for (char c : tArray) {
            set.add(c);
            ++need[c];
        }
        while (right < sArray.length) {
            char c = sArray[right];
            ++right;
            if (!set.contains(c)) {
                continue;
            }
            ++window[c];
            if (window[c] == need[c]) {
                ++valid;
            }
            while (valid == set.size() && left < right) {
                if (right - left < endIndex - startIndex) {
                    startIndex = left;
                    endIndex = right;
                }
                char d = sArray[left];
                ++left;
                if (!set.contains(d)) {
                    continue;
                } else {
                    if (window[d] == need[d]) {
                        --valid;
                    }
                    --window[d];
                }
            }
        }

        return startIndex == -1 ? "" : s.substring(startIndex, endIndex);
    }
}

http://www.niftyadmin.cn/n/5238573.html

相关文章

JavaEE进阶学习:Spring Boot 配置文件

1.配置文件的作用 整个项目中所有重要的数据都是在配置文件中配置的&#xff0c;比如&#xff1a; 数据库的连接信息&#xff08;包含用户名和密码的设置&#xff09;&#xff1b;项目的启动端口&#xff1b;第三方系统的调用秘钥等信息&#xff1b;用于发现和定位问题的普通…

网站安全攻防:降本增效的解决之道

在互联网时代&#xff0c;网站安全问题备受关注。网站遭受各种攻击的风险一直存在&#xff0c;这不仅威胁到网站的正常运行&#xff0c;也可能导致用户信息泄漏等严重后果。因此&#xff0c;对于网站管理员和业主而言&#xff0c;了解如何解决网站被攻击的问题显得尤为重要。本…

python pyaudio显示音频波形图

python pyaudio显示音频波形图 代码如下&#xff1a; import numpy as np import matplotlib.pylab as plb import wave# 读取 wav wf wave.open("./output.wav", "rb")# 获取音频相关参数&#xff1a;声道数、量化位数、采样频率、采样帧数 nchannels,…

玩转大数据6:实时数据处理与流式计算

引言 在当今的数字化时代&#xff0c;数据正在成为一种新的资源&#xff0c;其价值随着时间的推移而不断增长。因此&#xff0c;实时数据处理和流式计算变得越来越重要。它们在许多领域都有广泛的应用&#xff0c;包括金融、医疗、交通、能源等。本文将探讨实时数据处理和流式…

Flink核心概念

并行度 当要处理的数据量非常大时&#xff0c;我们可以把一个算子操作&#xff0c;“复制”多份到多个节点&#xff0c;数据来了之后就可以到其中任意一个执行。这样一来&#xff0c;一个算子任务就被拆分成了多个并行的“子任务”&#xff08;subtasks&#xff09;&#xff0…

vue2+electron桌面端一体机应用

vue2+electron项目 前言:公司有一个项目需要用Vue转成exe,首先我使用vue-cli脚手架搭建vue2项目,然后安装electron 安装electron 这一步骤可以省略,安装electron-builder时会自动安装electron npm i electron 安装electron-builder vue add electron-builder 项目中多出…

2023年JetBrains开发调查:Java 8仍广泛使用

开发者生态系统调查是查找和分析实际情况的好方法&#xff0c;而实际情况通常与看似流行或趋势的情况相反。 排名前三&#xff1a; Java8采用率&#xff1a;50%Java17采用率&#xff1a;45%Java11采用率&#xff1a;38% 看到这么多人仍在使用 Java 8&#xff08;及更早版本&…

【设计模式-3.1】结构型——外观模式

说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;外观模式&#xff1b; 亲手下厨还是点外卖&#xff1f; 外观模式属于结构型的设计模式&#xff0c;关注类或对象的组合&#xff0c;所呈现出来的结构。以吃饭为例&#xff0c;在介绍外观模式之前&#xff0…