【Hot100】LeetCode—76. 最小覆盖子串

news2024/11/25 0:48:43

题目

  • 原题链接:76. 最小覆盖子串

1- 思路

利用两个哈希表解决分为 :① 初始化哈希表②遍历 s,处理当前元素,判断当前字符是否有效③收缩窗口④更新最小覆盖子串


2- 实现

⭐76. 最小覆盖子串——题解思路

在这里插入图片描述

class Solution {
    public String minWindow(String s, String t) {

        // 定义两个 HashMap
        HashMap<Character,Integer> hs = new HashMap<>();
        HashMap<Character,Integer> ht = new HashMap<>();
        // 定义 
        int cnt = 0;
        String res = "";

        // 初始化 ht
        for(int i = 0 ; i < t.length();i++){
            char c = t.charAt(i);
            ht.put(c,ht.containsKey(c) ? ht.get(c)+1:1);

        }

        // 遍历 s
        for(int i = 0, j = 0 ; i < s.length();i++){
            char c = s.charAt(i);
            hs.put(c, hs.containsKey(c) ? hs.get(c)+1 : 1);

            // 判断 i 合法
            if(ht.containsKey(c) && hs.get(c) <= ht.get(c)) cnt++;

            // 缩小区间
            while (j <= i && (!ht.containsKey(s.charAt(j)) || hs.get(s.charAt(j)) > ht.get(s.charAt(j)))) 
            {
                hs.put(s.charAt(j), hs.get(s.charAt(j ++)) - 1);
            }

            // 3 收集结果
            // 首先是必须等于 cnt && (hs.length()> (i-j+1) || res.length()<1)
            if(cnt==t.length() && ( res.length() > (i-j+1) || res.length()<1)){
                res = s.substring(j,i+1);
            }

        }
        return res;
    }
}

3- ACM 实现

public class minWindow {

    public static String minWindow(String s,String t){
        // 1.数据结构
        HashMap<Character,Integer> ht = new HashMap<>();
        HashMap<Character,Integer> window = new HashMap<>();
        int cnt = 0;
        String res = "";

        // 2.遍历 t 初始化 ht
        for(int i = 0 ; i < t.length();i++){
            char c = t.charAt(i);
            ht.put(c,ht.containsKey(c)? ht.get(c)+1:1);
        }

        // 3.遍历 s
        for(int i = 0,j=0 ; i < s.length();i++){
            char cc = s.charAt(i);
            window.put(cc,window.containsKey(cc)? window.get(cc)+1:1);

            // 判 cc 断有效性
            // 在 ht 中
            if(ht.containsKey(cc) && window.get(cc) <=
                    ht.get(cc)) cnt++;

            // 窗口收缩
            while(j<=i && (!ht.containsKey(s.charAt(j)) || window.get(s.charAt(j)) > ht.get(s.charAt(j)))){
                window.put(s.charAt(j),window.get(s.charAt(j++))-1);
            }

            // 更行 res
            if(cnt == t.length() && (res.length()>(i-j+1) || res.length()<1)){
                res = s.substring(j,i+1);
            }
        }
        return res;
    }


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入字符串1");
        String s = sc.nextLine();

        System.out.println("输入字符串2");
        String t = sc.nextLine();
        String res = minWindow(s,t);
        System.out.println("结果是"+ res);
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution:def removeDuplicateLetters(self, s: str) -> str:vis defaultdict(int)cnt defaultdict(int)for ch in s: cnt[ch] 1queue []for ch in s:if vis[ch] 0:while queue and queue[-1] > ch and cnt[queue[-1]]:vi…

VS Code设置C++编译器路径

C_Cpp.default.compilerPath是C/C编译器路径; python.condaPath是conda路径.

Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接

目录 报错 解决办法 报错 在redis文件夹的路径栏中输入 cmd 命令&#xff0c;打开控制栏窗口界面 报错说是 redis-cli.exe打开就显示Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝&#xff0c;无法连接。 解决办法 &#xff08;1&#xff09;cmd…

【教学类-71-01】20240802蔬菜切切乐01

背景需求&#xff1a; ✂️自制教具分享✂️蔬菜切切乐&#xff08;剪纸&#xff09; - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/explore/65bf6809000000001100fa53?app_platformandroid&ignoreEngagetrue&app_version8.46.0&share_from_user_hidd…

mybatis保存postgresql数组格式数据

新建表的时候在int4后加上[]中括号就行 -- 创建数组 SELECT ARRAY[1, 2, 3, 4, 5];-- 访问数组元素&#xff08;从1开始&#xff09; SELECT ARRAY[1, 2, 3, 4, 5][1]; -- 返回 1-- 数组长度 SELECT array_length(ARRAY[1, 2, 3, 4, 5], 1); -- 返回 5-- 数组连接 SELECT ARRA…

C语言 | Leetcode C语言题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; char* removeDuplicateLetters(char* s) {int vis[26], num[26];memset(vis, 0, sizeof(vis));memset(num, 0, sizeof(num));int n strlen(s);for (int i 0; i < n; i) {num[s[i] - a];}char* stk malloc(sizeof(char) * 27);int stk…

Linux软件编程

8月1日学习了最后的标准IO&#xff0c;流的偏移。然后进入了文件IO的学习&#xff0c;包括文件的打开、读写、关闭以及偏移。之后又学习了剩余的一些函数接口&#xff0c;可以对文件进行一些其余操作。 8月2日学习了目录文件和链接文件的操作。目录文件的操作包括目录的创建、…

8月17日|广州|Cocos开发者沙龙不见不散!

6月底举行的Cocos成都沙龙吸引了近200位开发者和10多家发行&#xff0c;得到了大家的一致好评。 Cocos广州沙龙即将到来&#xff0c;会邀请更多KOL和头部发行、渠道嘉宾分享行业经验&#xff0c;让大家实现技术干货、游戏合作、行业信息多丰收。 活动主题&#xff1a;小游戏与出…

二叉树构建(从3种遍历中构建)python刷题记录

R3-树与二叉树篇. 目录 从前序与中序遍历序列构造二叉树 算法思路&#xff1a; 灵神套路 从中序与后序遍历序列构造二叉树 算法思路&#xff1a; 灵神套路 从前序和后序遍历序列构造二叉树 算法思路&#xff1a; 灵神套路 从前序与中序遍历序列构造二叉树 算法…

请你学习:前端布局2 - 定位(Positioning)是一种重要的布局技术

在页面布局中&#xff0c;定位&#xff08;Positioning&#xff09;是一种重要的布局技术&#xff0c;它允许我们精确地控制元素在页面上的位置。定位模式、是否脱标以及移动位置是理解定位的三个关键方面。 1 定位模式 定位模式决定了元素在文档中的定位方式&#xff0c;通过…

一款完全免费的数据恢复软件

WinFR&#xff0c;Windows文件恢复&#xff08;微软命令行程序&#xff09;的免费图形界面&#xff0c;帮您轻松恢复文件。WinFR是免费的Windows数据恢复替代方案&#xff0c;支持U盘数据恢复、硬盘数据恢复、存储卡数据恢复、文件数据恢复等功能。WinFR完全调用Windows文件恢复…

简单的docker学习 第2章docker引擎

第2章docker引擎 2.1Docker 引擎发展历程 2.1.1 首发版本架构 Docker 在首次发布时&#xff0c;其引擎由两个核心组件构成&#xff1a;LXC&#xff08;Linux Container&#xff09;与 Docker Daemon。不过&#xff0c;该架构依赖于 LXC&#xff0c;使得 Docker 存在严重的问…

第一百八十六节 Java XML教程 - Java DOM编辑

Java XML教程 - Java DOM编辑 属性 以下代码显示如何向元素添加属性。 import java.io.StringWriter;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Tr…

【OS】AUTOSAR OS Spinlock实现原理(下篇)

目录 3.1 Spinlock配置代码 3.1.1 Os_SpinlockConfigType_Tag 3.1.2 Os_LockConfigType_Tag 3.1.3 不同配置参数对配置代码生成的影响 3.2 Os_GetSpinlock详解 3.2.1 Os_SpinlockIsNotLockedLocal 3.2.2 Os_SpinlockIsLockOrderValid 3.2.3 Os_SpinlockSuspendByMethod…

bias偏置项(bias term)

bias偏置项&#xff08;bias term&#xff09;或者称为截距项&#xff08;intercept term&#xff09; 简称b 它其实就是函数的截距&#xff0c;与线性方程y wx b中的b的意义是一样的。 在y wx b中&#xff0c;b表示函数在y轴上的截距&#xff0c;控制着函数偏离原点的距…

食品安全知识竞赛规则及流程方案

活动简介 本届竞赛以“反食品浪费”为主线&#xff0c;在专业知识比拼基础上&#xff0c;融入了食物贮存方法、标签标识认知等生活化场景&#xff0c;将科普知识与日常生活紧密结合&#xff0c;更深入地践行“以赛促学 以学促行”的比赛口号&#xff0c;旨在通过大学生群体带动…

vue3集成LuckySheet实现导入本地Excel进行在线编辑,以及导出功能

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

萤石摄像头更换wifi操作记录

手机和摄像头在同一wifi下下载萤石云视频app长按reset,蓝灯常闪app中配置WiFi&#xff0c;要输入设备验证码&#xff0c;在设备上有配置完就可以了 H264编码修改方法https://open.ys7.com/bbs/article/14

️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)

引言&#xff1a;种下一棵树最好的时间是十年前,其次是现在 书接上回&#xff1a;将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的&#xff1a;在这个大模型横行的时候&#xff0c;我们常用电脑如何开展大模型的工作…

抽帧剪辑手法有哪些有什么好处 抖音抽帧补帧能不能提高作品原创度 抽帧剪辑可以防止被判搬运么 会声会影视频制作教程 会声会影中文免费下载

如果作品过不了原创检测&#xff0c;那么建议你一定要学会抽帧剪辑&#xff0c;这是目前最有效的防搬运检测手段。精细化地抽帧、补帧&#xff0c;可以轻松通过视频平台的原创和版权检测&#xff0c;避免视频被判搬运。在抖音或快手上进行短视频创作时&#xff0c;‌抽帧和补帧…