LeetCode 第76题模板
class Solution {
public String minWindow(String s, String t) {
int size = 0;
int[] need = new int[128];
int[] window = new int[128];
for(char c : t.toCharArray()) {
if(need[c] == 0) {
size++;
}
need[c]++;
}
int left = 0;
int right = 0;
int valid = 0;
int start = 0;
int len = Integer.MAX_VALUE;
while(right < s.length()) {
char rightChar = s.charAt(right);
window[rightChar]++;
if(need[rightChar] == window[rightChar]) {
valid++;
}
while(valid == size) {
if(right - left + 1 < len) {
start = left;
len = right - left + 1;
}
char leftChar = s.charAt(left);
if(need[leftChar] == window[leftChar]) {
valid--;
}
window[leftChar]--;
left++;
}
right++;
}
return len == Integer.MAX_VALUE ? "" : s.substring(start,start+len);
}
}
LeetCode 第567题模板
class Solution {
public boolean checkInclusion(String s1, String s2) {
int[] need = new int[26];
int[] window = new int[26];
int size = 0;
for(char c : s1.toCharArray()) {
if(need[c-'a'] == 0) {
size++;
}
need[c-'a']++;
}
int left=0,right=0;
int valid = 0;
while(right < s2.length()) {
char rightChar = s2.charAt(right);
window[rightChar - 'a']++;
if(need[rightChar - 'a'] == window[rightChar-'a']) {
valid++;
}
while(valid == size) {
if(right - left + 1 == s1.length()) {
return true;
}
char leftChar = s2.charAt(left);
window[leftChar-'a']--;
if(window[leftChar-'a'] < need[leftChar-'a']) {
valid--;
}
left++;
}
right++;
}
return false;
}
}