Sliding window
76. Minimum Window Substring
https://labuladong.gitbook.io/algo/mu-lu-ye/hua-dong-chuang-kou-ji-qiao-jin-jie
class Solution {
public String minWindow(String s, String t) {
int left=0;
int right = 0;
Map<Character, Integer> tMap = new HashMap<>();
for(int i=0; i<t.length(); i++){
tMap.put(t.charAt(i), tMap.getOrDefault(t.charAt(i), 0)+1);
}
int validChar=0;
// [start, end)
int resultStart = 0;
int resultEnd = 0;
while(right<s.length()){
char c = s.charAt(right);
if(tMap.containsKey(c)){
if(tMap.get(c)>0) validChar++;
// need to substract even if the value is 0
tMap.put(c, tMap.get(c)-1);
}
right++;
// move the left pointer
while(validChar==t.length()){
if(resultEnd-resultStart==0 || right-left<resultEnd-resultStart){
resultEnd = right;
resultStart = left;
}
c = s.charAt(left);
left++;
if(tMap.containsKey(c)){
if(tMap.get(c)==0) validChar--;
tMap.put(c, tMap.get(c)+1);
}
}
}
// remember: substring()
return s.substring(resultStart, resultEnd);
}
}
Last updated
Was this helpful?