当前位置: 首页 > news >正文

Leetcode 76. 最小覆盖子串

76. 最小覆盖子串 - 力扣(LeetCode)

class Solution {/**也是滑动窗口,思路简单,但实现起来容易出错。一个tmap记录目标串t的各个字符出现的次数;一个smap记录原串的某个滑动窗口里字符出现次数。两个指针left,right都从0开始,用right遍历原串s,如果smap包含了所有tmap的kv,那么肯定就匹配上了,这个时候呢,就更新left,进行++操作,每加一次,就看是不是不满足smap包含了所有tmap的kv,如果不满足就停止left的++。*/public String minWindow(String s, String t) {if(s == null || t==null || s.length()==0 || t.length()==0){return "";}Map<Character,Integer> targetMap=new HashMap<>();// 这里其实也可以用charAtfor(char c:t.toCharArray()){targetMap.put(c,targetMap.getOrDefault(c,0)+1);}int left=0,right=0;// t字符串里不同字符的数量int tCnt=targetMap.size();int sCnt=0;//Integer.MAX_VALUEint start=0,minLen=1000005;Map<Character,Integer> sMap=new HashMap<>();while(right<s.length()){char c=s.charAt(right);sMap.put(c,sMap.getOrDefault(c,0)+1);if(targetMap.containsKey(c) && sMap.get(c).intValue()==targetMap.get(c).intValue()){sCnt++;}// right-left-1,因为下标left到right之间字符串的长度范围是right-left+1,减去1等于t.length,这个长度才是真实的临界值while(sCnt==tCnt && right-left-1>=t.length()){char sc=s.charAt(left);if(right-left+1<minLen){start=left;minLen=right-left+1;}sMap.put(sc,sMap.get(sc)-1);left++;if(targetMap.containsKey(sc) && sMap.get(sc).intValue()<targetMap.get(sc).intValue()){// 说明匹配的子串字符种类数不一样了,left就不能再++了sCnt--;}}right++;}return minLen==1000005?"":s.substring(start,start+minLen);}
}

http://www.lryc.cn/news/375806.html

相关文章:

  • JAVAWEB--Mybatis03
  • 论文学习_Fuzz4All: Universal Fuzzing with Large Language Models
  • 元数据相关资料整理 metadata
  • 【Android面试八股文】谈一谈你对http和https的关系理解
  • Vue3 中 setup 函数与 script setup 用法总结
  • Springboot 开发之任务调度框架(一)Quartz 简介
  • 企业中面试算法岗时会问什么pytorch问题?看这篇就够了!
  • 【学习】程序员资源网址
  • 【3D模型库】机械三维模型库整理
  • 基于Python-CNN深度学习的物品识别
  • Qt | 简单的使用 QStyle 类(风格也称为样式)
  • Idea连接GitLab的过程以及创建在gitlab中创建用户和群组
  • 关于glibc-all-in-one下载libc2.35以上报错问题
  • C语言之#define #if 预处理器指令
  • modbus流量计数据解析(4个字节与float的换算)
  • 关于element-plus中el-select自定义标签及样式的问题
  • 硕思logo设计师下载-2024官方最新版-logo制作软件安装包下载
  • springboot和mybatis项目学习
  • simdjson 高性能JSON解析C++库
  • 安卓Context上下文
  • 实验13 简单拓扑BGP配置
  • 面试题分享--Spring02
  • 基于QT和C++实现的中国象棋
  • Mojo崛起:AI-first 的编程语言能否成为新流行?
  • 【数据结构与算法】哈夫曼树与哈夫曼编码
  • 基于多头注意力机制卷积神经网络结合双向门控单元CNN-BIGRU-Mutilhead-Attention实现柴油机故障诊断附matlab代码
  • k8s redis 单节点部署
  • 科普童话投稿
  • 【Ardiuno】使用ESP32单片机创建web服务通过网页控制小灯开关的实验(图文)
  • 百元蓝牙耳机哪款音质最好?四款实力超群机型推荐