package leetcode;
import sun.awt.WindowIDProvider;
/**
* 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
*/
public class LeetCode76 {
public static String minWindow(String s, String t) {
if (t.length()>s.length()){
return "";
}
int l = 0,r=-1;
int min = s.length()+1;
String result = "";
int[] freqs = new int[60];
int[] save = new int[2];
for (int i = 0;i<t.length();i++){
freqs[t.charAt(i)-'A']++;
}
while (l<s.length()&&r<s.length()){
if (r-l+1<t.length()&&r+1<t.length()){
r++;
}else {
if (matching(s.substring(l,r+1),freqs)){
if (r-l+1<min){
min = r-l+1;
save[0]=l;
save[1]=r;
}
l++;
}else if (r+1<=s.length()){
r++;
}
}
}
if (min<s.length()+1){
return s.substring(save[0],save[1]+1);
}else {
return "";
}
}
//判断匹配的方法
public static boolean matching(String windowC,int[] freqs){
int[] windowChar = new int[60];
for (int j = 0;j<windowC.length();j++){
windowChar[windowC.charAt(j)-'A']++;
}
//进行匹配
for (int n = 0;n<60;n++){
if (freqs[n]!=0&&(freqs[n]>windowChar[n])){
return false;
}
}
return true;
}
public static void main(String[] args) {
String s = "ADOBECODEBANC";
String t = "ABC";
String n = minWindow(s,t);
System.out.println(n);
}
}
老师您帮忙看一下需要怎么优化,leetcode前265个测试用例都过了,就最后一个超时了