解法一:排序后循环比较
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> list = new LinkedList<>();
char[] chars = p.toCharArray();
Arrays.sort(chars);
String p_ = new String(chars);
for(int i=0; i+p_.length()-1<s.length(); i++){
String sub = s.substring(i, i+p_.length());
chars = sub.toCharArray();
Arrays.sort(chars);
sub = new String(chars);
if(sub.equals(p_)){
list.add(i);
}
}
return list;
}
}
注意:
String p_ = new String(Arrays.sort(p.toCharArray()))
不行,Arrays.sort(chars)
改变的是chars,不是返回值。s.substring(i,j)
提取[i, j)处的字符串。- 防止超出范围,条件判断为
i+p_.length()-1<s.length()
。 - 字符串的判断,不是
==
,而是sub.equals(p_)
。 - String->char数组:
char[] chars = s.toCharArray()
; char数组->String:s = new String(chars)
- List->数组:
int[] nums = list.toArray()
; 数组->List:List list = nums.asList()