给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
示例 1:
输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba").
示例 2:
输入:s1= "ab" s2 = "eidboaoo"
输出:false
提示:
1 <= s1.length, s2.length <= 10^4s1和s2仅包含小写字母
class Solution {
public boolean checkInclusion(String s1, String s2) {
//擦,谁能
//检查是否满足.
int s1Len = s1.length();
int s2Len = s2.length();
if(s1Len > s2Len){
return false;
}
//s1 的字符数组
int[] count1 = new int[26];
//s2 的字符数组
int[] count2 = new int[26];
for(int i = 0; i < s1Len; i++){
count1[s1.charAt(i) - 'a']++;
count2[s2.charAt(i) - 'a']++;
}
//如果两个数组相同,则代表相同
if (Arrays.equals(count1, count2)) {
return true;
}
for(int i = s1Len; i < s2Len; i++){
count2[s2.charAt(i) - 'a']++;
//减去移动之后的数字
count2[s2.charAt(i - s1Len) - 'a']--;
//如果两个数组相同,则代表相同
if (Arrays.equals(count1, count2)) {
return true;
}
}
return false;
}
// private boolean checkSubStr(char[] array1,char[] array2){
// //当前相同的个数
// int same = 0;
// //需要相同的个数
// int needSameNum = array1.length;
// //s2的索引
// int s2Idx = 0;
// //s1的索引
// int s1Idx = 0;
// for(; s2Idx< array2.length; s2Idx++){
// if(same == needSameNum){
// return true;
// }
// if(array1[s1Idx] == array2[s2Idx]){
// same++;
// s1Idx++;
// } else {
// s1Idx=0;
// same=0;
// }
// }
// if(same == needSameNum){
// return true;
// }
// return false;
// }
}