0%

LeetCode.字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

  • 示例:
    输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
    输出: [ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”] ]
  • 说明:
  1. 所有输入均为小写字母。
  2. 不考虑答案输出的顺序

解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
object StrGroup {
def main(args: Array[String]): Unit = {
println(groupAnagrams(Array("eat", "tea", "tan", "ate", "nat", "bat")))
println(groupAnagrams(Array("ddddddddddg", "dgggggggggg")))
}

/**
* 时间复杂度O(n*k*logk)
*/
def groupAnagrams(strs: Array[String]): List[List[String]] = {
val map = new mutable.HashMap[List[Char], ListBuffer[String]]()

strs.foreach(a => {
val key = a.toCharArray.toList.sortWith((a, b) => if (a > b) true else false)
if (!map.contains(key)) {
map.put(key, ListBuffer(a))
} else {
map.get(key).get += a
}
})

map.values.map(_.toList).toList
}
}