持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
1.描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
2.思路
本题需要我们找出数组中的所有字母异位词进行归类返回,字母异位词也就是指两个词所使用的字母都是一样的,只不过顺序不一致。
这也就说明了我们如果遇到了字母种类数量一致的两个单词,那就可以认定为字母异位词。如果说字母种类数量一致,那么是不是说明两个单词对字母排序以后的数组顺序会是相同的顺序可以判断为字母异位词。
接下来我们使用一个哈希的数据结构来保存判断后的单词,我们可以将单词重新排序后的字符串用作一个key值,将原字符串收集进一个数组里面,然后将数组作为val,每次将key值排序后去哈希里面寻找是否已经拥有该key值,如果有就将原字符串加入其中,没有就新增一个对象。这样将所有的单词遍历一遍,就能够将所有的字母异位词进行一个归类,然后再将哈希结构中的val提取出来放到一个数组里就可以了。
3.代码
var groupAnagrams = function(strs){
let map = new Map
strs.forEach(element => {
let arr = element.split('')
let key = arr.sort().join('')
let val = map.has(key)?map.get(key):[]
val.push(element)
map.set(key,val)
});
return Array.from(map.values())
}
console.log(groupAnagrams(['eat','tea','tan','ate','nat','bat']))