Leetcode 最小覆盖子串
最小覆盖子串
题目描述:
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。提示:1 <= s.length, t.length <= 10^5s 和 t 由英文字母组成
题目链接
class Solution {private String s;private String t;private Map<Character,Integer> index;private Map<Character,Integer> window;public String minWindow(String s, String t) {// 初始化int len = s.length();if(t.length()>len) return ""; // 特判if(len == 1){if(t.length() == 1 && s.charAt(0) == t.charAt(0)) return ""+s.charAt(0);else return "";}this.s = s;this.t = t;String result = "";this.index = new HashMap<Character,Integer>();this.window = new HashMap<Character,Integer>();for(int i = 0 ; i<t.length() ; i++){this.index.put(t.charAt(i),index.getOrDefault(t.charAt(i),0)+1);}// 双指针法int left = 0;int right = 0;int minLen = len;while(right<len){// 首先移动右指针直至找到一个包含所有t字符的子串while(right<len && !check()){window.put(s.charAt(right),window.getOrDefault(s.charAt(right),0)+1);right++;}// 其次移动左指针直至无法找到一个包含所有t字符串的子串while(check()){window.put(s.charAt(left),window.getOrDefault(s.charAt(left),0)-1); // 负数不会影响结果left++;}// 处理if(minLen >= (right-left+1)){minLen = right-left+1;result = s.substring(left-1,right);// left-1到right的子串}}return result;}private boolean check(){Iterator iter = index.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Character key = (Character) entry.getKey(); Integer val = (Integer) entry.getValue(); if (window.getOrDefault(key, 0) < val) {return false;}} return true;}
}
该题利用双指针法,首先移动右指针,直到找到某一段s字符串含有t字符串所有字符的才停止移动,然后移动左指针,直到不满足该段s字符串中含有t字符串所有字符才停止移动,整个操作重复以上步骤,每次记录最小的result和最小长度。这里主要的难点就是:如何才能判断t字符串元素都包含在某一段s字符串中的所有元素中,笔者初次使用数组,发现卡在最后一个数据集,超时了,然后借鉴了官方的题解,利用HashMap结构,才通过的。详细请看代码,读者有疑问欢迎留言。
Leetcode 最小覆盖子串相关推荐
- Leetcode 76最小覆盖子串77组合78子集
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...
- 【LeetCode】【HOT】76. 最小覆盖子串(滑动窗口)
[LeetCode][HOT]76. 最小覆盖子串 文章目录 [LeetCode][HOT]76. 最小覆盖子串 package hot;public class Solution76 {public ...
- LeetCode 76. 最小覆盖子串 (滑动窗口哈希表)
LeetCode 76. 最小覆盖子串 思路: 准备一个map1记录字符串t(字符, 字符个数) 准备一个map2记录在s的窗口中所包含的t串字符(字符,字符个数) 左端点收缩条件:窗口内已经覆盖了t ...
- LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波
LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从 ...
- 【LeetCode】76. 最小覆盖子串 (Java代码)
[LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...
- LeetCode第76题:最小覆盖子串(困难)
LeetCode第76题:最小覆盖子串(困难) 题目:给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 解题思路:我认为题干说的有点不明确,刚开始我以为只要 ...
- LeetCode - 76 最小覆盖子串
目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 76. 最小覆盖子串 - 力扣(LeetCode) 题目描述 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符 ...
- java最小子串覆盖_LeetCode 76. 最小覆盖子串
LeetCode 76. 最小覆盖子串 题目 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBAN ...
- 最小覆盖子串(Hard)
目录 最小覆盖子串(滑动窗口+字典) Problem Description Sample Input Sample Output Hint Solution Code 最小覆盖子串(滑动窗口+字典) ...
最新文章
- R使用lm构建单变量线性回归模型
- DFT实训教程笔记3(bibili版本)-SOC Scan Implementtation Scan Practice Session II
- 申请补办 CET(纸笔考试)成绩证明的方法
- duilib学习领悟(4)
- composer windows安装
- spring事务源码解析
- opencv源码解析之(5):CommandLineParser类的简单理解
- 前端小白案例-爱新鲜抽屉式特效制作
- LINUX上传下载小工具lrzsz
- MATLAB求图像的均值、中值、众数、方差、协方差、相关系数
- 微信公众号开发框架 For Java —— wechatapi
- Liferay layout_configuration 分析
- 微信公众号正式号网络授权域名操作
- 绕过“请在微信客户端打开链接”如微师下载视频等。
- Good Luck in CET-4 Everybody! HDU - 1847 (巴氏博弈)
- 软件测试中文电子版姚静_软件测试[(美)ron patton]读书笔记
- mysql查询sql中日期为当天的记录_SQL 查询当天,本月,本周的记录 sql 查询日期...
- 【Linux】一些命令
- html垂直居中的方法
- 大数据-zookeeper