题目
方法一:滑动窗口
public class FindAnagrams {
public List<Integer> findAnagrams(String s, String p) {
int[] ss = new int[26];
int[] pp = new int[26];
int sl = s.length();
int pl = p.length();
if (sl<pl) {
return new ArrayList<Integer>();
}
for (int i = 0; i < pl; i++) {
ss[s.charAt(i)-'a']++;
pp[p.charAt(i)-'a']++;
}
List<Integer> r = new ArrayList<Integer>();
if (Arrays.equals(ss, pp)) {
r.add(0);
}
for (int i = 0; i < sl-pl; i++) {
ss[s.charAt(i)-'a']--;
ss[s.charAt(pl+i)-'a']++;
if (Arrays.equals(ss, pp)) {
r.add(i+1);
}
}
return r;
}
public static void main(String[] args) {
String s = "cbaebabacd";
String p = "abc";
FindAnagrams findAnagrams = new FindAnagrams();
System.out.println(findAnagrams.findAnagrams(s, p));
}
}
LeetCode测试结果