【leetcode hot 100 76】最小覆盖子串

news/2025/3/4 23:15:07/

解法一:(滑动窗口)在 s 上滑动窗口,通过移动 r 指针不断扩张窗口。当窗口包含 t 全部所需的字符后,如果能收缩,我们就收缩窗口直到得到最小窗口。

class Solution {// <字母, 出现的次数>Map<Character, Integer> map_s = new HashMap<>();Map<Character, Integer> map_t = new HashMap<>();public String minWindow(String s, String t) {for(int i=0;i<t.length();i++){// map_t.getOrDefault(a,0):若a在map_t内,则返回key=a的value,否则返回0(默认值)。map_t.put(t.charAt(i), map_t.getOrDefault(t.charAt(i),0)+1);}int left=0, right=-1;// Integer.MAX_VALUE的使用// left_len和right_len不能=0,后面return的判断left_len==right_len会忽略(s=a,t=a)的情况int min_len=Integer.MAX_VALUE, left_len=-1, right_len=-1;while(right<s.length()){right++; // 不能放在后面,return的s.substring回错误,计算不出(s=a,t=a)的情况if(right<s.length() && map_t.containsKey(s.charAt(right))){// 放入map_s中,计数map_s.put(s.charAt(right), map_s.getOrDefault(s.charAt(right),0)+1);}while(check() && left<=right){// 是while(left++直到最小值)不是if()if(min_len > (right-left+1)){min_len = right-left+1;left_len = left;right_len = right+1;}if(map_t.containsKey(s.charAt(left))){// 一定存在,默认值为0也可map_s.put(s.charAt(left), map_s.getOrDefault(s.charAt(left),0)-1);}left++;}}return left_len==-1 ? "" : s.substring(left_len,right_len);}public boolean check(){Iterator iter = map_t.entrySet().iterator();while(iter.hasNext()){Map.Entry entry = (Map.Entry) iter.next();Character key = (Character) entry.getKey();Integer value = (Integer) entry.getValue();if(map_s.getOrDefault(key,0) < value){return false;}}return true;}
}

注意:

  • 对于char类型,其对应的包装类是Character
  • 判断某一key值是否存在:map_s.containsKey(),而不是map_s.isContainsKey()
  • map_t.getOrDefault(a,0):若a在map_t内,则返回key=a的value,否则返回0(默认值)。
  • 迭代:
Iterator iter = map_t.entrySet().iterator();
while(iter.hasNext()){Map.Entry entry = (Map.Entry) iter.next();Character key = (Character) entry.getKey();Integer value = (Integer) entry.getValue();
}

http://www.ppmy.cn/news/1576666.html

相关文章

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…

广义线性模型下的数据分析(R语言)

一、实验目的&#xff1a; 通过上机试验&#xff0c;掌握利用R实现线性回归分析、逻辑回归、列联分析及方差分析&#xff0c;并能对分析结果进行解读。 数据&#xff1a; 链接: https://pan.baidu.com/s/1JqZ_KbZJEk-pqSUWKwOFEw 提取码: hxts 二、实验内容&#xff1a; 1、2…

Python PDF文件拆分-详解

目录 使用工具 将PDF按页数拆分 将PDF的每一页拆分为单独的文件 将PDF按指定页数拆分 根据页码范围拆分PDF 根据指定内容拆分PDF 将PDF的一页拆分为多页 在日常生活中&#xff0c;我们常常会遇到大型的PDF文件&#xff0c;这些文件可能难以发送、管理和查阅。将PDF拆分成…

【Java 基础(人话版)】Java 虚拟机(JVM)

引言 学习 Java 时&#xff0c;我们经常听到 “一次编译&#xff0c;随处运行” 这句话。这背后的核心支撑技术就是 Java 虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;。JVM 负责运行 Java 代码&#xff0c;使得 Java 具有良好的跨平台能力。 但你知道吗&#x…

DeepSeek vs Grok vs ChatGPT:大模型三强争霸,谁将引领AI未来?

DeepSeek vs. Grok vs. ChatGPT&#xff1a;大模型三强争霸&#xff0c;谁将引领AI未来&#xff1f; 在人工智能领域&#xff0c;生成式模型的竞争已进入白热化阶段。DeepSeek、Grok和ChatGPT作为三大代表性工具&#xff0c;凭借独特的技术路径和应用优势&#xff0c;正在重塑…

【RAG】sPecialized KnowledgE and Rationale Augmented Generation

Why PIKE-RAG? 为什么选择PIKE-RAG? 看介绍,感觉能力特别高大上。看介绍,感觉功能接地气、很实用sPecialized KnowledgE and Rationale Augmented Generation 不是RAG (Retrieval Augmented Generation)In recent years, Retrieval Augmented Generation (RAG) systems h…

C++ Class 基础

在 C 中&#xff0c;class&#xff08;类&#xff09; 是面向对象编程&#xff08;OOP&#xff09;的核心概念之一。类用于定义对象的属性和行为&#xff0c;是封装数据和方法的基本单位。以下是 C 中类的基础知识。 1. 类的定义 类通过 class 关键字定义&#xff0c;基本语法…

jvm内存不够,怎么重新分配

目录 第一章、问题分析1.1&#xff09;报错提示1.2&#xff09;报错分析 第二章、解决方式2.1&#xff09;修改IDEA的JVM内存设置2.2&#xff09; 修改Spring Boot项目的JVM内存设置 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接…