076J. Minimum Window Substring
https://leetcode.com/problems/minimum-window-substring/
Method Sliding Window
class Solution {
//全局变量
//tmap用来储存和记录
private Map<Character, Integer> smap;
private Map<Character, Integer> tmap;
public String minWindow(String s, String t) {
this.smap = new HashMap<>();
this.tmap = new HashMap<>();
initTmap(t);
int minSize = Integer.MAX_VALUE;
int slow = 0, fast = 0, start = 0, end = 0;
while(fast < s.length() ){
if(!isContains()){
smap.put(s.charAt(fast), smap.getOrDefault(s.charAt(fast),0) + 1);
fast++;
}else{
if(minSize > fast - slow){
start = slow;
end = fast;
minSize = fast - slow;
}
smap.put(s.charAt(slow), smap.get(s.charAt(slow)) - 1);
slow++;
}
}
while(slow < s.length() && isContains()){
if( minSize > fast - slow){
start = slow;
end = fast;
minSize = fast - slow;
}
smap.put(s.charAt(slow), smap.get(s.charAt(slow)) - 1);
slow++;
}
return s.substring(start, end);
}
private boolean isContains(){
for(char c : tmap.keySet()){
if(smap.getOrDefault(c,0) < tmap.get(c)){
return false;
}
}
return true;
}
private void initTmap(String t){
for(char c: t.toCharArray()){
tmap.put(c, tmap.getOrDefault(c,0) + 1);
}
}
}
Last updated
Was this helpful?