1.Description
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
2.Example
输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").
输入: s1= "ab" s2 = "eidboaoo"
输出: False
3.Solution
使用了滑动窗口和Arrays.equals函数:
窗口的长度为s1的长度,定义两个数组,nums1统计s1中各个字符出现次数,然后nums2在窗口滑动过程中统计窗口中各字符出现的次数,如果两个数组相等的话说明s2含有s1的排列。
class Solution {
public boolean checkInclusion(String s1, String s2) {
if(s1.length()>s2.length()){
return false;
}
int[] nums1 = new int[26];
int[] nums2 = new int[26];
for(int i=0;i<s1.length();i++) {
nums1[s1.charAt(i)-'a']++;
nums2[s2.charAt(i)-'a']++;
}
if(Arrays.equals(nums1, nums2)) {
return true;
}
for(int i = s1.length();i<s2.length();i++) {
nums2[s2.charAt(i)-'a']++;
nums2[s2.charAt(i-s1.length())-'a']--;
if(Arrays.equals(nums1, nums2)) {
return true;
}
}
return false;
}
}