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

package leetcode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class demo_438 {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> list=new ArrayList<Integer>();
        if(s.length()<p.length()) {
            return list;
        }
        //滑动窗口,用数组存储当前窗口每个字母存在的个数
        int[] pnum=new int[26];
        int[] snum=new int[26];
        for(int i=0;i<p.length();i++) {
            pnum[p.charAt(i)-'a']++;
            snum[s.charAt(i)-'a']++;
        }
        //判断当前数组是否相等
        if(Arrays.equals(snum, pnum)) {
            list.add(0);
        }
        for(int i=0;i<s.length()-p.length();i++) {
            //删除左边界
            snum[s.charAt(i)-'a']--;
            //加入右边界,即为窗口滑动
            snum[s.charAt(i+p.length())-'a']++;
            //判断当前当前数组是否相等,因为窗口已经向右滑动一个,即i+1
            if(Arrays.equals(snum, pnum)) {
                list.add(i+1);
            }
        }
        System.out.println(list);
        return list;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_438 demo=new demo_438();
        String s="cbaebabacd";
        String p="abc";
        demo.findAnagrams(s, p);
    }

}

 

posted on 2022-04-18 10:43  一仟零一夜丶  阅读(9)  评论(0)    收藏  举报