(javaScript)leetcode每日一题 - 49 字母异位词分组

362 阅读1分钟

leetcode每日一题 - 49 49. 字母异位词分组

image.png

题解

如果每个字符串无论什么顺序都相等,则把它归类到同个数组当中 例如

Map(3) {
  'a,e,t' => [ 'eat', 'tea', 'ate' ],
  'a,n,t' => [ 'tan', 'nat' ],
  'a,b,t' => [ 'bat' ]
}

这里用到了在js当中将每个字符串例如'eat'进行数组排序再转为字符串,最后利用巧用map进行相同类型存储。

贴出代码

// 10.49 字母异位词分组
  let strs = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
  function groupAnagrams(strs: string[]): string[][] {
    const map = new Map()
    for (let i in strs) {
      // 转换为数组再进行排序,再利用map
      /*
       * Map(3) {
       * 'a,e,t' => [ 'eat', 'tea', 'ate' ],
       * 'a,n,t' => [ 'tan', 'nat' ],
       * 'a,b,t' => [ 'bat' ]
       * }
       */
      let arr = Array.from(strs[i])
      arr.sort()
      let arrString: string = arr.toString()
      let res = map.has(arrString) ? map.get(arrString) : new Array()
      res.push(strs[i])
      map.set(arrString, res)
    }
    // map.values() => { [ 'eat', 'tea', 'ate' ], [ 'tan', 'nat' ], [ 'bat' ] } 转数组
    return Array.from(map.values())
  }
  groupAnagrams(strs)