Leetcode刷题(第49题)——字母异位词分组

x33g5p2x  于2022-03-01 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(321)

一、题目描述

  1. 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

二、示例

  1. 示例一
  2. 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
  3. 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
  4. 示例二
  5. 输入: strs = [""]
  6. 输出: [[""]]
  7. 示例三
  8. 输入: strs = ["a"]
  9. 输出: [["a"]]

三、解题思路
由题目可知:本题可以对数组中的字符串进行划分,将所含字母相同的都划分到一起。那么问题是如何知道所含字母相同呢?如果我们将字符串都按照字符从小到大的顺序进行排列的话,此时我们就能区分哪些字符所含字母是相同的。说干就干,但是我们会发现字符串中并没有所谓的sort方法,但是我们知道数组存在呀,此时我们就可以将字符串转化为数组split(""),然后对其ascll进行升序排列,获取字符的ascll可以通过charCodeAt()来获取。到此顺序排好了,该如何保存数据呢?我们每一个相同的组合都对应着一个数组,此时我们可以使用Map数据结构,以排列好的字符串为key,以数组为value进行保存,最终再进行遍历map中的数组,将其放入一个数组中即可。
四、代码展示

  1. /**
  2. * @param {string[]} strs
  3. * @return {string[][]}
  4. */
  5. var groupAnagrams = function(strs) {
  6. let result = []
  7. let map = new Map()
  8. for(let item of strs) {
  9. let res = item.split("").sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0)).join("")
  10. if(map.has(res)) {
  11. map.get(res).push(item)
  12. }else {
  13. map.set(res, [item])
  14. }
  15. }
  16. map.forEach(item => {
  17. result.push(item)
  18. })
  19. return result
  20. };

五、结果

相关文章