diff --git a/problems/first-unique-character-in-a-string.kt b/problems/first-unique-character-in-a-string.kt new file mode 100644 index 0000000..49a44bd --- /dev/null +++ b/problems/first-unique-character-in-a-string.kt @@ -0,0 +1,26 @@ +class Solution { + private data class Accumulator(val firstIndex: Int, var count: Int = 0) { + fun add() { + count++ + } + } + + fun firstUniqChar(s: String): Int = s + .foldIndexed(mutableMapOf()) { 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) +}