Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S = "ADOBECODEBANC"
T = "ABC"
Minimum window is "BANC"
.
Note:
If there is no such window in S that covers all characters in T, return the empty string ""
.
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
这种类型题目做法是创建一个target的数组,然后创建两个指针,一个start,一个end,在创建一个counter来标记是否遍历完T,此题有个难点就是考虑集中情况:
S="AAB" T="AB";S="AB" T="AB";S="AOOB" T="AB"这三种情形。代码如下:
1 public class Solution { 2 public String minWindow(String s, String t) { 3 int[] word = new int[128]; 4 for(char c:t.toCharArray()){ 5 word[c]++; 6 } 7 int begin = 0; 8 int end = 0; 9 int count = t.length(); 10 int len = Integer.MAX_VALUE; 11 int head = 0; 12 while(end<s.length()){ 13 if(word[s.charAt(end++)]-->0) count--; 14 while(count==0){ 15 if(end-begin<len) len = end-(head=begin); 16 if(word[s.charAt(begin++)]++==0) count++; 17 } 18 } 19 System.out.println(head); 20 return len==Integer.MAX_VALUE?"":s.substring(head,head+len); 21 } 22 }