Permutation in String
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].
Solution
public class Solution {
public boolean checkInclusion(String s1, String s2) {
if (s2.length() < s1.length()) {
return false;
}
int[] f = new int[26];
int[] g = new int[26];
for (int i = 0; i < s1.length(); i++) {
f[s1.charAt(i) - 'a'] += 1;
}
int s1Size = s1.length();
for (int i = 0; i < s1Size; i++) {
g[s2.charAt(i) - 'a'] += 1;
}
if (Arrays.equals(f, g)) {
return true;
}
for (int i = 1; i + s1Size <= s2.length(); i++) {
g[s2.charAt(i - 1) - 'a'] -= 1;
g[s2.charAt(i + s1Size - 1) - 'a'] += 1;
if (Arrays.equals(f, g)) {
return true;
}
}
return false;
}
}