解法一:排序后循环比较
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()