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
Note:
- The input strings only contain lower case letters.
- The length of both given strings is in range [1, 10,000].
使用滑动窗口Sliding Window
class Solution {
public boolean checkInclusion(String s1, String s2) {
if (s1.length() > s2.length()) {
return false;
}
final int ASCII = 256;
int[] m1 = new int[ASCII];
int[] m2 = new int[ASCII];
for (int i = 0; i < s1.length(); i++) {
m1[s1.charAt(i)]++;
m2[s2.charAt(i)]++;
}
if (Arrays.equals(m1, m2)) {
return true;
}
for (int i = s1.length(); i < s2.length(); i++) {
m2[s2.charAt(i)]++;
m2[s2.charAt(i - s1.length())]--;
if (Arrays.equals(m1, m2)) {
return true;
}
}
return false;
}
}