kt: add «3163. String Compression III»

URL:	https://leetcode.com/problems/string-compression-iii/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2024-11-04 22:21:14 +01:00
parent 340d234a4f
commit 383579f508
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -0,0 +1,32 @@
class Solution {
private data class State(val compressed: MutableList<Pair<Int, Char>>, val count: Int, val character: Char) {
private fun add() {
if (count <= 0) {
return
}
compressed.add(count to character)
}
fun update(c: Char): State {
if (c != character || count >= 9) {
add()
return State(compressed, 1, c)
}
return State(compressed, 1 + count, c)
}
fun finalize(): State {
add()
return State(compressed, 0, '_')
}
}
fun compressedString(word: String): String =
word.fold(State(mutableListOf(), 0, word[0])) { acc, it ->
acc.update(it)
}.finalize().compressed.joinToString(separator = "") {
"${it.first}${it.second}"
}
}