![]()
class Solution { public String minWindow(String s, String t) { if(s == null || s.length() == 0) return ""; //滑动窗口+自定义map数组 int[]need = new int[128]; int minlength = Integer.MAX_VALUE; int count = t.length(),left=0,right=0,start=0; for(int i=0;i<t.length();i++){ char c = t.charAt(i); need[c]++; } while(right < s.length()){ char c = s.charAt(right); if(need[c] > 0) count--; //存在于s字符串,但是不存在于t字符串,need对应的值会变成负数; need[c]--; //此时代表已经在s中找到了t字串,准备收缩左指针; while(count==0){ int current = right - left + 1; //找到了更短的最小覆盖字串 if(minlength > current){ minlength = current; start = left; } char d = s.charAt(left); //表示当前元素在需求清单中; if(need[d] == 0) count++; need[d]++; left++; } //开启下一轮查找; right++; } return minlength == Integer.MAX_VALUE ? "" :s.substring(start,start+minlength); } }