思路:
如何判断两个等长的字符串是不是字母异位词呢?
有两种方法:
- 先将字符串转为字符数组,再用Arrays.sort排序,再转为字符串。如果这两个字符串排序后也一样,那这两个字符串就是字母异位词。
- 第二种方法是首先建立一个长为度26的整形数组,代表每一个小写字母出现的次数。然后把字符串转为字符数组,遍历这个字符数组,每次都将遍历到的字符c减去 ’ a ',然后把整型数组中的c-‘a’ 处元素+1,代表对应的字符出现次数+1。当两个字符串对应的整型数组相同时,说明两个字符串为字母异位词。
class Solution {
public int[] code(String s)
{
char[] c = s.toCharArray();
int[] alp = new int[26];
for(char cc:c)
{
alp[cc-'a']++;
}
return alp;
}
public List<Integer> findAnagrams(String s, String p) {
int n = p.length();
int[] pcode = code(p);
List<Integer> l = new ArrayList<>();
for(int i=0;i<=s.length()-n;i++)
{
String sbs = s.substring(i,i+n);
int[] code = code(sbs);
if(Arrays.equals(code,pcode))
l.add(i);
}
return l;
}
}