剑指 Offer II 014. 字符串中的变位词

思路: 只要找出 s1 是不是s2的连续子串。想到的就是滑动窗口。具体:使用一个 26大小的数组,计算 s1 每个字母出现的次数,然后在 s2 上滑动计算即可。当我们开始时 ,得到一个字母 -'a' = 下标 ,数组[下标 ] 如果大于 0 ,则表示窗口[ left ,right] 内 这个字母多了,则要从左边缩小窗口直到剔除相同的字母,每次剔除完以后,判断 left -right+1 == s2长度。如果是则表示是子串。
class Solution {
public boolean checkInclusion(String s1, String s2) {
int [] cut =new int [26];
for(int i=0 ;i< s1.length();i++){
cut[s1.charAt(i)-'a']--;
}
int left =0;
// 初始化窗口:[left,right]
for(int right=0;right<s2.length();right++){
int index=s2.charAt(right)-'a';
cut[index]++; // right 窗口右移
while(cut[index]>0){
cut[s2.charAt(left++)-'a']--; // left 窗口右移
}
if(right-left+1==s1.length()) return true;
}
return false;
}
}