class Solution {
public boolean checkInclusion(String s1, String s2) {
Map<Character, Integer> map = new HashMap<>();
for(int i = 0; i < s1.length(); i++){
map.put(s1.charAt(i), map.getOrDefault(s1.charAt(i), 0) + 1);
}
for(int i = 0; i < s2.length(); i++){
if(map.containsKey(s2.charAt(i))){
Map<Character, Integer> m = new HashMap<>(map);
for(int j = i; j < s2.length(); j++){
if(m.containsKey(s2.charAt(j))){
m.put(s2.charAt(j), m.get(s2.charAt(j)) - 1);
if(m.get(s2.charAt(j)) == 0){
m.remove(s2.charAt(j));
}
}else{
break;
}
}
if(m.size() == 0){
return true;
}
}
}
return false;
}
}
class Solution {
public boolean checkInclusion(String s1, String s2) {
int len1 = s1.length();
int len2 = s2.length();
int[] sign = new int[26];
if(len1 > len2){
return false;
}
for(int i = 0; i < len1; i++){
sign[s1.charAt(i) - 'a']++;
}
int left = 0;
int right = 0;
for(right = left; right < len2; right++){
int index = s2.charAt(right) - 'a';
sign[index]--;
while(sign[index] < 0){
sign[s2.charAt(left) - 'a']++;
left++;
}
if(right - left + 1 == len1){
return true;
}
}
return false;
}
}