主页 > 开源代码  > 

438找到字符串中所有的字母异位词

438找到字符串中所有的字母异位词

滑动窗口 卡住短的数组 向长的数组进行比较 出现字符次数相同的就是一组异位词、

class Solution {

    public List<Integer> findAnagrams(String s, String p) {

         //存储结果

        List<Integer> result = new ArrayList<>();

        //charP存储p中字母出现的个数

        int [] charP = new int[26];

        //charS存储存在p.length中p异味词的次数

        int [] charS = new int[26];

        //先统计p中出现的词的个数

        for (int c : p.toCharArray()) {

            charP[c - 'a']++;

        }

        //右端点进入字符数组s

        for (int right = 0; right < s.length(); right++) {

            charS[s.charAt(right) - 'a']++;

            //计算左窗口的位置

            int left= right - p.length() + 1;

            //窗口大小小于0的话 继续遍历

            if (left<0){

                continue;

            }

            //如果两个字符数组字符出现的次数相同

            if (Arrays.equals(charS, charP)){

                //将左窗口添加进去

                result.add(left);

            }

           

            //窗口右移

            charS[s.charAt(left) - 'a']--;

        }

       

        return result;

    }

}

标签:

438找到字符串中所有的字母异位词由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“438找到字符串中所有的字母异位词