2020年寒假算法刷题1
题目
java代码
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];
int len1 = s1.length();
int len2 = s2.length();
for(int i =0;i<len1;i++){
arr1[s1.charAt(i)-'a']++;
arr2[s2.charAt(i)-'a']++;
}
int cha=len2-len1;
for(int i =0;i<cha;i++){
if(Arrays.equals(arr1,arr2)){
return true;
}
arr2[s2.charAt(i+len1)-'a']++;
arr2[s2.charAt(i)-'a']--;
}
return Arrays.equals(arr1,arr2);
}
}
这道题我也写了蛮久,自己的思路总是很局限打不开。看了别人的题解,搞懂了以后,自己又写了一遍。
使用滑动窗口的方法,
总体思路就是,首先因为字符串输入的都是a-z的小写字母,
首先为两个字符串创建两个相对应的数组,
可以通过ascall码-a的差值存放每个字符串中字母的出现以及次数
先通过比较s2中最左端开始的s1.length的距离的arr1和arr2的值是否相等,
然后再把s2中剩下的值对应的字母存入arr2,同时要把数组arr2和s1中不相同的数值删除.