2022-4-26 滑动窗口


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

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

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

 1 class Solution {
 2     public List findAnagrams(String s, String p) {
 3         List list=new ArrayList<>();
 4         if (s.length()return list;
 5         int[] need=new int[26];
 6         int[] cur=new int[26];
 7         int l=0,r=0,n=p.length();
 8         for (int i=0;i){
 9             need[p.charAt(i)-'a']++;
10         }
11         while (r<s.length()){
12             cur[s.charAt(r)-'a']++;
13             r++;
14             if (r-lcontinue;
15             if (Arrays.equals(need,cur)){
16                 list.add(l);
17             }
18             cur[s.charAt(l)-'a']--;
19             l++;
20         }
21         return list;
22     }
23 
24 }

思路:滑动窗口。数组判断应该比hash判断更快,占用空间更大。

相关