算法题-字母异位词分组【JS实现】

字母异位词分组


给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。

输入:
[“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:
[ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ]

哈希表

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
    
    
  if (!strs || !strs.length) return []
  const map = {
    
    };
  
  for (let i of strs) {
    
    
    let temp = [...i].sort().join();
    if (!map[temp]) {
    
    
      map[temp] = [i]
    } else {
    
    
      map[temp].push(i)
    }
  }

  return Object.values(map)
};
/**
 * @param {string[]} strs
 * @return {string[][]}
 * use `[charCodeAt() - 97]` to get unique index from the prime array
 */
var groupAnagrams = function (strs) {
    
    
  if (!strs || !strs.length) return [];
  const 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];
  const map = {
    
    };

  for (let str of strs) {
    
    
    let prod = [...str].reduce((r, c) => r * primes[c.charCodeAt() - 97], 1);
    map[prod] ? map[prod].push(str) : (map[prod] = [str]);
  }

  return Object.values(map);
};
var groupAnagrams = function (strs) {
    
    
  let hash = new Map();

  for (let str of strs) {
    
    
    let arr = Array(26).fill(0);
    for (let i = 0; i < str.length; i++) {
    
    
      arr[str.charCodeAt(i) - 97]++;
    }
    let hashKey = arr.join();
    
    if (hash.has(hashKey)) {
    
    
      hash.set(hashKey, [...hash.get(hashKey), str]);
    } else {
    
    
      hash.set(hashKey, [str]);
    }
  }
  return [...hash.values()];
};

猜你喜欢

转载自blog.csdn.net/baidu_33591715/article/details/108573058