搭建论坛网站,福州工程网站建设团队,淘宝优惠网站建设,静态网站规范题目
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串#xff0c;则返回空字符串 “” 。
注意#xff1a;
对于 t 中重复字符#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果…题目
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串则返回空字符串 “” 。
注意
对于 t 中重复字符我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串我们保证它是唯一的答案。
示例 1
输入s “ADOBECODEBANC”, t “ABC” 输出“BANC” 解释最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。
解
class Solution {public String minWindow(String s, String t) {if (s.length() t.length()) {return ;}MapCharacter, Integer map new HashMap();for (int i 0; i t.length(); i) {map.put(t.charAt(i), map.getOrDefault(t.charAt(i), 0) 1);}int j 0;int min Integer.MAX_VALUE;int start 0;int end 0;for (int i 0; i s.length(); i) {if (map.get(s.charAt(i)) ! null) {map.put(s.charAt(i), map.get(s.charAt(i)) - 1);while (allZero(map)) {if (map.get(s.charAt(j)) ! null) {map.put(s.charAt(j), map.get(s.charAt(j)) 1);}j;if (i - j min) {min i - j;start j - 1;end i 1;}}}}return s.substring(start, end);}private boolean allZero(MapCharacter, Integer map) {for (Map.EntryCharacter, Integer entry : map.entrySet()) {if (entry.getValue() 0) {return false;}}return true;}
}