题目描述
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
求解思路
- 这道题目官方的答案是滑动窗口法,但方法怎么简单怎么来,能通过就行
- 字母异位词所包含的字母的个数都是一样的,所以将它转换为字符数组排序之后应该是一样的
- 遍历 s ,每次取长度和 p 相等的子字符串,转为字符数组,并比较是否和 p 排序之后的数组相等;如果相等则把索引 i 保存起来;
- 最后返回索引 list 即可。
输入输出示例
代码
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res = new ArrayList<>();
int slen = s.length();
int plen = p.length();
char[] pArray = p.toCharArray();
Arrays.sort(pArray);
for(int i = 0; i < slen - plen + 1; i++){
String subS = s.substring(i, i + plen);
char[] subSArray = subS.toCharArray();
Arrays.sort(subSArray);
if(String.valueOf(pArray).equals(String.valueOf(subSArray)) ){
res.add(i);
}
}
return res;
}
}