1
0
Fork 0
mirror of https://gitlab.com/mfocko/LeetCode.git synced 2024-09-16 16:36:56 +02:00
LeetCode/kt/first-unique-character-in-a-string.kt
Matej Focko aaaebf1d52
style(kt): reformat the files
Signed-off-by: Matej Focko <me@mfocko.xyz>
2024-05-17 18:23:38 +02:00

27 lines
706 B
Kotlin

class Solution {
private data class Accumulator(val firstIndex: Int, var count: Int = 0) {
fun add() {
count++
}
}
fun firstUniqChar(s: String): Int =
s
.foldIndexed(mutableMapOf<Char, Accumulator>()) { i, acc, c ->
acc.getOrPut(c) { Accumulator(i) }.add()
acc
}
.filterValues { it.count == 1 }
.minByOrNull { (_, acc) -> acc.firstIndex }
?.value
?.firstIndex
?: -1
}
fun main() {
val s = Solution()
check(s.firstUniqChar("leetcode") == 0)
check(s.firstUniqChar("loveleetcode") == 2)
check(s.firstUniqChar("aabb") == -1)
}