mirror of
https://gitlab.com/mfocko/LeetCode.git
synced 2024-11-09 15:59:06 +01:00
26 lines
662 B
Kotlin
26 lines
662 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)
|
|
}
|