这个题的思路是:
我们首先需要维护两个数组need和window,然后使用Arrays匹配这两个数组是否相等,若相等则返回true,不相等则返回false。
首先将a数组导入need数组中,然后使用两个指针制造滑动窗口,need和window内放置26位0,代表26个字母出现的次数。
class Solution {
public boolean checkInclusion(String s1, String s2) {
char[] a = s1.toCharArray();
char[] need = new char[26];
char[] b = s2.toCharArray();
char[] window = new char[26];
int start = 0;
for(int i=0;i<a.length;i++){
need[a[i]-'a']++;
}
//将s1导入a数组中
for(int end=0;end<b.length;end++){
//维护一个滑动窗口,将窗口内部的字符串放入window中
if(end-start>a.length-1) {
window[b[start]-'a']--;
//这个b[start]-‘a’就是ascii相减。
start++;
}
window[b[end]-'a']++;
if(Arrays.equals(need,window)) return true;
}
return false;
}
}