剑指 Offer II 014. 字符串中的变位词

在这里插入图片描述

这个题的思路是:

我们首先需要维护两个数组need和window,然后使用Arrays匹配这两个数组是否相等,若相等则返回true,不相等则返回false。

首先将a数组导入need数组中,然后使用两个指针制造滑动窗口,need和window内放置26位0,代表26个字母出现的次数。

class Solution {
    
    
    public boolean checkInclusion(String s1, String s2) {
    
    
            char[] a = s1.toCharArray();
            char[] need = new char[26];
            char[] b = s2.toCharArray();
            char[] window = new char[26];
            int start = 0;
            for(int i=0;i<a.length;i++){
    
    
                need[a[i]-'a']++;
            }
            //将s1导入a数组中
            for(int end=0;end<b.length;end++){
    
    
            //维护一个滑动窗口,将窗口内部的字符串放入window中
                if(end-start>a.length-1) {
    
    
                    window[b[start]-'a']--;
                    //这个b[start]-‘a’就是ascii相减。
                    start++;
                }
                window[b[end]-'a']++;
                if(Arrays.equals(need,window)) return true;
            }
            return false;
    }
}

Guess you like

Origin blog.csdn.net/qq_37772958/article/details/121858396