Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.
Example 1:
Input: s1 = "ab" s2 = "eidbaooo" Output: True Explanation: s2 contains one permutation of s1 ("ba").
Example 2:
Input:s1= "ab" s2 = "eidboaoo" Output: False
Constraints:
- The input strings only contain lower case letters.
- The length of both given strings is in range [1, 10,000].
思路:滑动窗口,一个往前走,另外一个间隔相同的距离,跟着走,这里比较巧妙的是,用一个指针i,代表两个指针;i -len1代表后面的指针;这个题属于固定滑动窗口,跟之前的同向双指针,还不一样;
class Solution {
public boolean checkInclusion(String s1, String s2) {
int len1 = s1.length();
int len2 = s2.length();
if(len2 < len1) {
return false;
}
int[] scount = new int[26];
// scan s1;
for(int i = 0; i < len1; i++) {
char c = s1.charAt(i);
scount[c - 'a']++;
}
// scan s2;
for(int i = 0; i < len2; i++) {
char c = s2.charAt(i);
if(i < len1) {
scount[c - 'a']--;
} else {
scount[c - 'a']--;
scount[s2.charAt(i - len1) - 'a']++;
}
if(isZero(scount)) {
return true;
}
}
return false;
}
private boolean isZero(int[] scount) {
for(int i = 0; i < 26; i++) {
if(scount[i] != 0) {
return false;
}
}
return true;
}
}