字符串的排列>>>
滑動窗口
class Solution {
public boolean checkInclusion(String s1, String s2) {
Character[] s1Aray = new Character[s1.length()];
Character[] s2Aray = new Character[s2.length()];
Map<Character,Integer> map = new HashMap<>();
for(int i=0;i<s1.length();i++){
s1Aray[i]=s1.charAt(i);
map.put(s1.charAt(i),map.getOrDefault(s1.charAt(i),0)+1);
}
for(int i=0;i<s2.length();i++){
s2Aray[i]=s2.charAt(i);
}
int left = 0;
int right = 0;
while(right<s2.length()){
if(map.containsKey(s2Aray[right])){
map.put(s2Aray[right],map.getOrDefault(s2Aray[right],0)-1);
}
if(right-left==s1.length()-1){
if(matches(map)){
return true;
}else{
if(map.containsKey(s2Aray[left])){
map.put(s2Aray[left],map.getOrDefault(s2Aray[left],0)+1);
}
left++;
right++;
}
}else{
right++;
}
}
return false;
}
public boolean matches(Map<Character,Integer> map){
for(Integer i: map.values()){
if(i!=0) return false;
}
return true;
}
}