Question:
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"
.
public class Solution {
public String minWindow(String s, String t) {
int[] smap=new int[256];
int[] tmap=new int[256];
int found=0;
int length=Integer.MAX_VALUE;
String res="";
int i=0;
int j=0;
for(int k=0;k<=t.length()-1;k++)
{
tmap[t.charAt(k)]++;
}
while(j<s.length())
{
if(found<t.length())
{
if(tmap[s.charAt(j)]>0)
{
smap[s.charAt(j)]++;
if(smap[s.charAt(j)]<=tmap[s.charAt(j)])//最后应该到达等于
found++;
}
}
j++;
while(found==t.length()) //循环的目的是找到最短的包涵t的字串
{
if(j-i<length)
{
length=j-i;
res=s.substring(i,j);
}
if(tmap[s.charAt(i)]>0) //去除无关的前缀~
{
smap[s.charAt(i)]--;
if(smap[s.charAt(i)]<tmap[s.charAt(i)])
found--;
}
i++;
}
}
return res;
}
}