给定s1和s2两个字符串,判断s2是否包含s1的排列,也就是s1是不是s2的子串。
这里其实用固定窗口的滑动窗口就可以,不过这样也可以写,只不过条件要写成end-start==l1,不是while循环了。
class Solution {
int[] map1=new int[26];
int[] map2=new int[26];
public boolean checkInclusion(String s1, String s2) {
if(s1.length()>s2.length())return false;
int l1=s1.length();
int l2=s2.length();
char[] c1=s1.toCharArray();
char[] c2=s2.toCharArray();
int start=0;
int end=0;
for(int i=0;i<l1;i++){
map1[c1[i]-'a']++;
}
while(end<l2){
char c=c2[end];
end++;
map2[c-'a']++;
if(end-start==l1){
if(check())return true;
char q=c2[start];
start++;
map2[q-'a']--;
}
}
return false;
}
public boolean check(){
for(int i=0;i<26;i++){
if(map1[i]!=map2[i]){
return false;
}
}
return true;
}
}