438. 找到字符串中所有字母异位词 --力扣 --JAVA

题目

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

解题思路

  1. 区分情况,字符串s的长度小于p的长度则肯定没有异位词;
  2. 异位词的元素是无序的,可以针对元素本身排序后再进行比较;
  3. 使用自带的排序和比较方法会更节省时间。

代码展示

class Solution {
    public List findAnagrams(String s, String p) {
        if(s.length() < p.length()){
            return new ArrayList<>();
        }
        char[] ps = p.toCharArray();
        Arrays.sort(ps);
        List ans = new ArrayList<>();
        for (int i = 0; i <= s.length() - p.length(); i++){
            char[] ss = s.substring(i, i + p.length()).toCharArray();
            Arrays.sort(ss);
            if (Arrays.equals(ps, ss)){
                ans.add(i);
            }
        }
        return ans;
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)