题目链接:LeeCode438找到字符串中所有字母异位词
题目描述:
找字母异位词就是相同字母组成但是顺序不一样的词,自己写一个哈希,越散列越好,判断是否是字母异位词
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> list=new ArrayList<>();
//p串算出来的hash
int phash = myhash(p, p.length());
for (int i = 0; i < s.length() - p.length()+1; i++) {
String ss=s.substring(i,i+p.length());
int shash=myhash(ss,p.length());
if(shash==phash)list.add(i);
}
return list;
}
public static int myhash(String s,int len){
int ans=0;
for (int i = 0; i < len; i++) {
//不唯一越散列越好
int temp=((s.charAt(i)-'a'+132)*100+36)/27;
ans+=temp*temp*temp;
}
//返回hash值
return ans;
}
}