您的位置:首页 > 健康 > 美食 > 网站公司简介模板_二级域名出租_运营推广计划怎么写_深圳百度代理

网站公司简介模板_二级域名出租_运营推广计划怎么写_深圳百度代理

2024/10/7 4:29:24 来源:https://blog.csdn.net/m0_47066863/article/details/142455545  浏览:    关键词:网站公司简介模板_二级域名出租_运营推广计划怎么写_深圳百度代理
网站公司简介模板_二级域名出租_运营推广计划怎么写_深圳百度代理

文章目录

  • 题目描述
  • 代码


题目描述

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

注意:

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

示例 1:

输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。
示例 2:

输入:s = “a”, t = “a”
输出:“a”
解释:整个字符串 s 是最小覆盖子串。
示例 3:

输入: s = “a”, t = “aa”
输出: “”
解释: t 中两个字符 ‘a’ 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

提示:

m == s.length
n == t.length
1 <= m, n <= 105
s 和 t 由英文字母组成

进阶:你能设计一个在 o(m+n) 时间内解决此问题的算法吗?

代码

class Solution {public String minWindow(String s, String t) {Map<Character,Integer> need = new HashMap<>();//存储t中包含的字符及其需要的个数Map<Character,Integer> window = new HashMap<>();//存储滑动窗口中包含的字符及其字符的个数int valid = 0;//有效字符的个数,不在目标字符串t中的字符就不关心了int left = 0;//滑动窗口左边界int right = 0;//滑动窗口右边界int start = 0;//用来记录返回结果的左边界int minLen = Integer.MAX_VALUE;//用于更新满足条件的最小的字符串的长度//先把目标t的字符及其每个字符的数量更新到need中for(char ch :t.toCharArray()){need.put(ch,need.getOrDefault(ch,0)+1);}//不断更新右边界while (right<s.length()){char ch = s.charAt(right);right++;//如果当前字符是t中的字符if (need.containsKey(ch)){window.put(ch,window.getOrDefault(ch,0)+1);//这一步的判断是为了统计滑动窗口中多少个字符已经满足目标字符串t中字符个数了if (window.get(ch).equals(need.get(ch))){valid++;}}//已经找到一个滑动窗口包含t中的所有字母就更新左边界来寻求最小覆盖子串while (valid==need.size()){//比之前统计的小就更新if (minLen>right-left){start = left;minLen = right-left;}//滑动窗口左边界右移char l = s.charAt(left);if (need.containsKey(l)){window.put(l,window.get(l)-1);if (window.get(l) < need.get(l)) valid--;}left++;}}if (minLen==Integer.MAX_VALUE){return "";}return s.substring(start,start+minLen);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com