题目:(HashTable Two Point String)
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 emtpy string ""
.
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
题解:
有一个思想叫 滑动窗口:参考http://www.cnblogs.com/springfor/p/3872559.html
public class Solution { public String minWindow(String S, String T) { if(S.length()==0||T.length()==0||S==null||T==null) return ""; HashMap <Character,Integer> map =new HashMap <Character,Integer>(); for(int i=0;i<T.length();i++) if(map.containsKey(T.charAt(i))) map.put(T.charAt(i),map.get(T.charAt(i))+1); else map.put(T.charAt(i),1); int count=0; int pre=0; String res=""; int min=S.length()+1;//equal = s.length() just set a initial value for(int i=0;i<S.length();i++) { if(map.containsKey(S.charAt(i))) { map.put(S.charAt(i),map.get(S.charAt(i))-1); if(map.get(S.charAt(i))>=0) count++; while(count==T.length()) { if(map.containsKey(S.charAt(pre))) { map.put(S.charAt(pre),map.get(S.charAt(pre))+1); if(map.get(S.charAt(pre))>0) { if(min>i-pre+1) { min=i-pre+1; res=S.substring(pre,i+1); } count--; } } pre++; } } } return res; } }