class Solution {
/*自己想法,每次都要排序,时间复杂度太大,存在Arrays.equal函数
public boolean checkInclusion(String s1, String s2) {
//给一个定长的滑动窗口,
//Map<Character,Integer> map = new HashMap<>();
char[] crr = s1.toCharArray();
Arrays.sort(crr);
s1 = new String(crr);
//定长的滑动窗口
int left = 0;
int rigth = crr.length;
while (rigth <= s2.length()){
//拿出窗口,并进行对比
char[] curCrr = s2.substring(left,rigth).toCharArray();
Arrays.sort(curCrr);
String sub = new String(curCrr);
if (s1.equals(sub)){
return true;
}else {
//右移动,继续寻找
left++;
rigth++;
}
}
return false;
}
*/
//利用两个数组来做
public boolean checkInclusion(String s1, String s2) {
int[] cnt1 = new int[26];
int[] cnt2 = new int[26];
int n = s1.length();
int m = s2.length();
if(n > m) return false;
for(int i = 0;i < n;i++){
cnt1[s1.charAt(i) - 'a']++;
cnt2[s2.charAt(i) - 'a']++;
}
if(Arrays.equals(cnt1,cnt2)){
return true;
}
for (int i = n; i < m; ++i) {//i表示窗口的右边
++cnt2[s2.charAt(i) - 'a'];//对右边+
--cnt2[s2.charAt(i - n) - 'a'];//对左边减去
if (Arrays.equals(cnt1, cnt2)) {
return true;
}
}
return false;
}
}
567字符串的排列
最新推荐文章于 2024-06-27 18:47:05 发布