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