LeeCode438找到字符串中所有字母异位词(Java)(hash哈希)

题目链接: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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43590593/article/details/113869845