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].
class Solution {
public boolean checkInclusion(String s1, String s2) {
if (s2 == null || s2.length () == 0 || s1.length () > s2.length ()) {
return false;
}
int[] tracker = new int[26];
int lenS1 = s1.length ();
int lenS2 = s2.length ();
for (int i = 0; i < lenS1; i++) {
tracker[s1.charAt (i) - 'a'] ++;
tracker[s2.charAt (i) - 'a'] --;
}
if (isAllZero (tracker)) {
return true;
}
for (int i = lenS1; i < lenS2; i++) {
tracker[s2.charAt (i) - 'a'] --;
tracker[s2.charAt (i - lenS1) - 'a'] ++;
if (isAllZero (tracker)) {
return true;
}
}
return false;
}
private boolean isAllZero (int[] tracker) {
for (int num : tracker) {
if (num != 0) {
return false;
}
}
return true;
}
}
网友评论