题目
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
代码实现
滑动窗口
class Solution {
public boolean checkInclusion(String s1, String s2) {
if (s1.length() > s2.length()){
return false;
}
int[] arr1 = new int[26];
int[] arr2 = new int[26];
//将s1的所有元素放进数组,并且初始化窗口
for (int i = 0; i < s1.length(); i++) {
arr1[s1.charAt(i) - 'a']++;
arr2[s2.charAt(i) - 'a']++;
}
//遍历s2,当arr1和arr2一样的时候,证明是子串
for (int i = s1.length(); i < s2.length(); i++) {
if (Arrays.equals(arr1,arr2)){
return true;
}
//窗口右移,所以需要先把左边的元素移除
arr2[s2.charAt(i - s1.length()) - 'a']--;
//然后将新的元素放进数组中
arr2[s2.charAt(i)-'a']++;
}
return Arrays.equals(arr1,arr2);
}
}