Custom Sort String
You are given two strings order and s. All the words of order are unique and were sorted in some custom order previously. Permute the characters of s so that they match the order that order was sorted. More specifically, if a character x occurs before a character y in order, then x should occur before y in the permuted string.
Return any permutation of s that satisfies this property.
package questions
import _utils.UseCommentAsDocumentation
import utils.shouldBe
/**
* You are given two strings order and s. All the words of order are unique
* and were sorted in some custom order previously.
* Permute the characters of s so that they match the order that order was sorted.
* More specifically, if a character x occurs before a character y in order,
* then x should occur before y in the permuted string.
*
* Return any permutation of s that satisfies this property.
*
* [Source](https://leetcode.com/problems/custom-sort-string-kt/)
*/
@UseCommentAsDocumentation
private fun customSortString(order: String, s: String): String {
val countMap: MutableMap<Char, Int> = s.groupingBy { it }.eachCount().toMutableMap()
val sb = StringBuilder()
for (i in order) {
if (countMap.contains(i)) {
sb.append(i.toString().repeat(countMap[i]!!))
countMap.remove(i)
}
}
countMap.forEach { (key, count) ->
sb.append(key.toString().repeat(count))
}
return sb.toString()
}
fun main() {
customSortString(order = "cba", s = "abcd") shouldBe "cbad"
customSortString(order = "cbafg", s = "abcd") shouldBe "cbad"
}
Updated on 2022-02-12