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

76. 最小覆盖子串

题目:
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。

对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
如果 s 中存在这样的子串,我们保证它是唯一的答案。

解题思路:
这道题遍历s的子串的右端点right,如果子串涵盖t,则左端点left向右移动直到不涵盖t为止。在移动过程中更新最小子串的左右端点。
详细题解可看灵神题解https://leetcode.cn/problems/minimum-window-substring/solutions/2713911/liang-chong-fang-fa-cong-o52mn-dao-omnfu-3ezz

class Solution {public String minWindow(String s, String t) {if(s.length() < t.length()){return "";}int len_s = s.length();int ansLeft = -1, ansRight = len_s;Map<Character, Integer> cnt_t = new HashMap<>();Map<Character, Integer> cnt_sub = new HashMap<>();for(char c : t.toCharArray()){cnt_t.compute(c, (k, v) -> (v == null) ? 1 : v + 1);}int left = 0;for(int right = 0; right < len_s; right++){cnt_sub.compute(s.charAt(right), (k, v) -> (v == null) ? 1 : v + 1);while(isCovered(cnt_sub, cnt_t)){if(right - left < ansRight - ansLeft){ansLeft = left;ansRight = right;}cnt_sub.compute(s.charAt(left), (k, v) -> (v == null) ? 0 : v - 1);left++;}}return ansLeft < 0 ? "" : s.substring(ansLeft, ansRight + 1);}private boolean isCovered(Map<Character, Integer> map1, Map<Character, Integer> map2){for(char key : map2.keySet()){if(map1.getOrDefault(key, 0) < map2.get(key)){return false;}}return true;}
}

相关文章:

  • 【时时三省】(C语言基础)将外部变量的作用域扩展到其他文件
  • 深入理解常用依存关系标签
  • VAS1800Q高效恒流汽车LED驱动器电荷泵线性Chiplead
  • Unity json解析选择实测
  • ⚽ 实时赛事数据怎么接?WebSocket vs REST 接口详解!
  • 《TCP/IP协议卷1》第11章 UDP:用户数据报协议
  • 疏锦行Python打卡 DAY 27 函数专题2:装饰器
  • 常用scss技巧
  • 全局搜索正则表达式grep
  • 2.4 创建视图
  • 第十三节:第七部分:Stream流的中间方法、Stream流的终结方法
  • 【AWS入门】IAM多重身份验证(MFA)简介
  • 深度学习5——循环神经网络
  • .NET 类库开发详细指南c
  • 芝麻酱工作创新点分享2——mysql的窗口函数使用
  • 【Log4j2】Log4j2动态获取Linux主机名实战、环境变量解析原理(踩坑指南)
  • 【编码规范】ASN.1详解:从概念到C++实现解析
  • 量化面试绿皮书:11. 最后一个球
  • 单片机的中断功能-简要描述(外部中断为例)(8)
  • 聊一聊 Linux 上对函数进行 hook 的两种方式
  • 网站美工做图/企业网站网页设计
  • 网站点击弹出下载框 怎么做/windows7优化大师
  • 泰安市网站建设公司/适合seo的建站系统
  • 信息发布网站怎么做/网络营销推广的基本手段
  • iis7 默认网站目录/google推广一年3万的效果
  • 烟台建设联合会网站/双11销售数据