提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、完整代码
class Solution {
public String minWindow(String s, String t) {
String res = “”;
if(s.length() < t.length()) return res;
HashMap<Character,Integer> need = new HashMap<>();
HashMap<Character,Integer> window = new HashMap<>();
for(int i = 0;i < t.length();i++){
char c = t.charAt(i);
need.put(c,need.getOrDefault(c,0)+1);
}
//形成的区间是[left,right)
int right = 0,letf = 0;
int len = Integer.MAX_VALUE;
int start = 0;
int valid = 0;
while(right < s.length()){
char c= s.charAt(right);
right++;
if(need.containsKey©){
window.put(c,window.getOrDefault(c,0)+1);
if(window.get©.equals(need.get©)){
valid++;
}
}
// 判断左侧窗口是否要收缩
while(valid == need.size()){
// 在这里更新最小覆盖子串
if(right - letf < len){
len = right - letf;
start = letf;
}
// d 是将移出窗口的字符
char ch = s.charAt(letf);
// 左移窗口
letf++;
// 进行窗口内数据的一系列更新
if(need.containsKey(ch)){
if(window.get(ch).equals(need.get(ch))){
valid–;
}
window.put(ch,window.get(ch)-1);
}
}
}
return len == Integer.MAX_VALUE?"":s.substring(start,start+len);
}
}