Kotlin Leetcode - 500. Keyboard Row
class Solution {
fun findWords(words: Array<String>): Array<String> {
}
}
解題思路
這一題是用陣列的方式處理許多字串
利用 map()
filter()
和 distinct()
雖然前面需要花費一些時間
設置鍵盤上字母位置的資料
整體的邏輯其實並不複雜
Kotlin 參考解答
class Solution {
fun findWords(words: Array<String>): Array<String> {
val firstRow = listOf(
"q", "w", "e", "r", "t", "y", "u", "i", "o", "p",
"Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P",
"{", "}", "|", "[", "]", "\\"
)
val secondRow = listOf(
"a", "s", "d", "f", "g", "h", "j", "k", "l",
"A", "S", "D", "F", "G", "H", "J", "K", "L",
":", "\"", "'", ";"
)
val thirdRow = listOf(
"z", "x", "c", "v", "b", "n", "m",
"Z", "X", "C", "V", "B", "N", "M",
"?", "/", ",", ".", "<", ">"
)
return words
.map { it ->
val b = it
.split("")
.filter { it != "" }
.map {
when {
firstRow.contains(it) -> 1
secondRow.contains(it) -> 2
thirdRow.contains(it) -> 3
else -> 4
}
}
.distinct()
if (b.size == 1) it
else ""
}.filter { it != "" }
.toTypedArray()
}
}
當然,由於 leetcode 題目的屬性
我們可以改回傳 List<String>
這樣就不用作 toTypedArray()
的處理
class Solution {
fun findWords(words: Array<String>): List<String> {
val firstRow = listOf(
"q", "w", "e", "r", "t", "y", "u", "i", "o", "p",
"Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P",
"{", "}", "|", "[", "]", "\\"
)
val secondRow = listOf(
"a", "s", "d", "f", "g", "h", "j", "k", "l",
"A", "S", "D", "F", "G", "H", "J", "K", "L",
":", "\"", "'", ";"
)
val thirdRow = listOf(
"z", "x", "c", "v", "b", "n", "m",
"Z", "X", "C", "V", "B", "N", "M",
"?", "/", ",", ".", "<", ">"
)
return words
.map { it ->
val b = it
.split("")
.filter { it != "" }
.map {
when {
firstRow.contains(it) -> 1
secondRow.contains(it) -> 2
thirdRow.contains(it) -> 3
else -> 4
}
}
.distinct()
if (b.size == 1) it
else ""
}.filter { it != "" }
}
}
回到 leetcode 列表