leetCode字符串的排列问题,滑动窗口解法

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中不相同的数值删除.

猜你喜欢

转载自blog.csdn.net/weixin_43902063/article/details/112568649
今日推荐