首先将需要的字串中的字符以及出现次数储存到needMap中
right指针向右移动,找出满足字串的位置,紧接着收缩left指针知道不满足条件为止
将开始值和长度存储后继续第二步
class Solution {
public String minWindow(String s, String t) {
Map<Character,Integer> need = new HashMap<>();
for(char c : t.toCharArray()){
need.put(c,need.getOrDefault(c,0)+1);
}
Map<Character,Integer> window = new HashMap<>();
int left = 0,right = 0;
int valid = 0;
int size = s.length();
int minLen = size+1;
int start = 0;
while(right<size){
char c = s.charAt(right);
right++;
if(need.containsKey(c)){
window.put(c,window.getOrDefault(c,0)+1);
if(window.get(c).equals(need.get(c))){
valid++;
}
}
int needSize = need.size();
while(valid == needSize){
c = s.charAt(left);
left++;
if(need.containsKey(c)){
if(window.get(c).equals(need.get(c))){
valid--;
}
window.put(c,window.get(c)-1);
}
if(valid != needSize){
if(right - left +1 < minLen){
start = left -1;
minLen = right - left + 1;
}
}
}
}
return minLen == size + 1 ? "" : s.substring(start, start + minLen);
}
}