class Solution {
public String minWindow(String s, String t) {
int[] tFreq = new int[256];
for (int i = 0; i < t.length(); i++) {
tFreq[t.charAt(i)]++;
}
int[] sFreq = new int[256];
// [l,r] 滑动窗口
// 目标找出最短的 r - l + 1
int l = 0;
int r = -1;
String res = "";
int min = Integer.MAX_VALUE;
while (r + 1 < s.length()) {
r++;
sFreq[s.charAt(r)]++;
while (r - l + 1 >= t.length() && contains(sFreq, tFreq)) {
if (r - l + 1 < min) {
min = r - l + 1;
res = s.substring(l, r + 1);
}
sFreq[s.charAt(l)]--;
l++;
}
}
return res;
}
private boolean contains(int[] sFreq, int[] tFreq) {
for (int i = 0; i < sFreq.length; i++) {
if (sFreq[i] < tFreq[i]) {
return false;
}
}
return true;
}
}
波波老师,根据你438的解法,我理解后,模仿着把76题给解决,提交是通过的,可是时间效率不是很高,想请教下是接着往下呢,还是咋弄,是这样的,我现在处于离职状态,打算复习下之后找工作,我现在是尽可能通过这些练习题即可,还是也去找下最优解法,尽可能去理解