给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。 示例 1: 输入: s1 = "ab" s2 = "eidbaooo" 输出: True 解释: s2 包含 s1 的排列之一 ("ba"). 示例 2: 输入: s1= "ab" s2 = "eidboaoo" 输出: False
class Solution {
public boolean checkInclusion(String s1, String s2) {
/**
滑动窗口
跟字母异位次这个题一样
因为限制了都是小写字母 那么 字母一样 次数一样即可
新建2个数组 存放滑动串口的和 s1的
*/
int left=0,right=0;
int [] target=new int[26];
int [] window=new int[26];
给target初始化 每个字母->出现的次数
for(int i=0;i<s1.length();i++){
target[s1.charAt(i)-'a']++;
}
while(right<s2.length()){
window[s2.charAt(right)-'a']++;
if(right-left+1==s1.length()){
if(Arrays.equals(target,window)){//出现长度的一样,看下元素和次数一样吗?
return true;
}
window[s2.charAt(left)-'a']--; //左边界开始右移 去除左边界 元素
left++;
}
right++;
}
return false;
}
}