给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。LeetCode 链接
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
- 所有输入均为小写字母。
- 不考虑答案输出的顺序。
fun groupAnagrams(strs: Array<String>): List<ArrayList<String>> {
val lists = ArrayList<ArrayList<String>>()
out@ for (element in strs) {
for (list in lists) {
if (list.isEmpty()) {
list.add(element)
} else if (element.sameChar(list[0])) {
list.add(element)
continue@out
}
}
val tmp = ArrayList<String>()
lists.add(tmp)
tmp.add(element)
}
return lists
}
val bCount = IntArray(256)
/**
* ASCII 码比较
*/
fun String.sameChar(other: String): Boolean {
if (this.length != other.length) {
return false
}
val b1 = this.toByteArray()
val b2 = other.toByteArray()
if (b1.size != b2.size) {
return false
}
val zero = '0'.toByte()
for (i in b1.indices) {
bCount[b1[i] - zero]++
bCount[b2[i] - zero]--
}
val allZero = bCount.all { it == 0 }
if (!allZero) {
for (i in 0..255) {
bCount[i] = 0
}
}
return allZero
}