给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
/*方法一*/
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function (strs) {
let map = new Map()
strs.forEach((v,index)=>{
let a = [...v].sort().join('')
if(map.has(a)){
map.get(a).push(v)
}else{
map.set(a,[v])
}
})
return [...map.values()]
};
/*方法二*/
/**
* @param {string[]} strs
* @return {string[][]}
*/
var valueMap = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6,
g: 7,
h: 8,
i: 9,
j: 10,
k: 11,
l: 12,
m: 13,
n: 14,
o: 15,
p: 16,
q: 17,
r: 18,
s: 19,
t: 20,
u: 21,
v: 22,
w: 23,
x: 24,
y: 25,
z: 26,
}
var groupAnagrams = function (strs) {
let arr = []
for (let i = 0; i < strs.length; i++) {
let sum = strs[i].split('').reduce((a, b) => {
a += valueMap[b]
return a
}, 0)
arr.push(`${sum}`)
}
let map = new Map()
arr.forEach((b,index) => {
if (map.has(b)) {
map.get(b).push(index)
} else {
map.set(b,[index])
}
})
let arrs = []
let kes = map.keys()
map.forEach((v, key)=> {
if (key == '0') {
arrs.push([""])
} else {
let c = []
v.forEach(i => {
c.push(strs[i])
})
arrs.push(c)
}
})
return arrs
};
groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])