249. 移位字符串分组 - Kotlin 哈希表

Smile_slime_47

Problem: 249. 移位字符串分组

思路

设str中的每一个字符都右移n位得到的字符串叫str的一个右移字符串,可以除自身外,知道str一共有25种右移字符串

维护一个哈希表,存储字符串str对应的List,List中存储str及strings中出现的str的右移字符串

遍历strings,对于每一个str,遍历它及它的25种右移字符串,如果哈希表中存在对应的List,则将自身加入List中,如果不存在,则说明str是当前出现的第一个该类型的右移字符串,则新建一个键值对并将自身加入List中

最后输出map的所有值即可

复杂度

  • 时间复杂度:

  • 空间复杂度:

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
fun groupStrings(strings: Array<String>): List<List<String>> {
val map = HashMap<String, ArrayList<String>>()
for (str in strings) {
var tmp = str
var found = false
for (i in 0..25) {
tmp = shr(tmp)
if (map.containsKey(tmp)) {
map[tmp]!!.add(str)
found = true
}
}
if (!found) {
map[str] = ArrayList()
map[str]!!.add(str)
}
}
return map.values.toList()
}

fun shr(s: String): String {
var str = ""
s.forEach { str += if (it < 'z') (it + 1) else 'a' }
return str
}
}
Comments
On this page
249. 移位字符串分组 - Kotlin 哈希表