class Solution { public String minWindow(String s, String t) { int[] a = new int[128]; for (char ch : t.toCharArray()) { a[ch]++; } int[] b = new int[128]; int left = 0, right = 0, l = 0, min = s.length() + 1; char[] arr = s.toCharArray(); int dis = 0; //窗口内与t相同的数量 for (int i = 0; i < arr.length; i++) { if (a[arr[i]] > 0) { b[arr[i]]++; if (b[arr[i]] <= a[arr[i]]) { //如果大于就不算进去了。因为大于也满足。 dis++; } } if (dis == t.length()) { //左指针移动条件:arr[l]不在t内或者arr[l]在窗口内部的数量大于t中arr[l]的数量 while (a[arr[l]] == 0 || b[arr[l]] > a[arr[l]]) { if (a[arr[l]] > 0) { b[arr[l]]--; } l++; } if (i - l + 1 < min) { left = l; right = i; min = i - l + 1; } } } return min == s.length() + 1 ? "" : s.substring(left, right + 1); } }
原文:https://www.cnblogs.com/CPJ31415/p/14260114.html