本文主要是介绍LeetCode49字母的异位词分组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这题比较巧妙,将字符串中的每个字符赋以
hash质数
对字符串中的每个值可以乘以对应的质数,若发现最终的乘积结果相等,则字符串为对应的易伟慈分组,利用到hashMap
的变相处理方法
/*** @Author zhoujian* @Date 2020/8/20 8:55字母的异位词分组自定义字符串的哈希规则,使用质数作为乘法因子(Java)
https://leetcode-cn.com/problems/group-anagrams/solution/zi-ding-yi-zi-fu-chuan-de-ha-xi-gui-ze-shi-yong-zh/*/
public class Problem49 {public List<List<String>> groupAnagrams(String[] strs) {// 考察了哈希哈数的基本知识,zhiyao26个即可// key就是下标,value就是数值int[] primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29,31, 37, 41, 43, 47, 53, 59, 61, 67, 71,73, 79, 83, 89, 97, 101};// key是字符串自定义规则下的哈希值Map<Integer,List<String>> hashMap = new HashMap<>();for(String s:strs){int hashValue = 1;char[] charArray = s.toCharArray();for(char c:charArray){hashValue*=primes[c-'a'];}// 吧单词添加到哈希值相同的分组if(hashMap.containsKey(hashValue)){List<String> curList = hashMap.get(hashValue);curList.add(s);}else{List<String> newList = new ArrayList<>();newList.add(s);hashMap.put(hashValue,newList);}}return new ArrayList<>(hashMap.values());}
这篇关于LeetCode49字母的异位词分组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!