// Pair structure: (letter, frequency)
data class Pair(val letter: Char, val freq: Int)
// sortByFrequency — counts how often each letter appears and returns a sorted list
fun sortByFrequency(s: String): List<Pair> {
// Create a frequency array for 26 lowercase letters, initialized to 0
val freq = IntArray(26)
// Iterate through the string and count only alphabetic characters
for (c in s) {
if (c.isLetter()) {
val lower = c.lowercaseChar()
val index = lower.code - 'a'.code
freq[index]++
}
}
// Build a list of (letter, frequency) pairs
val result = List(26) { i ->
Pair(('a'.code + i).toChar(), freq[i])
}
// Sort pairs by frequency in descending order
return result.sortedByDescending { it.freq }
}
// Build a string sorted by frequency: ddddddddddddccccccbbbbbaaaafffeehhgs
fun buildSortedString(sorted: List<Pair>): String {
val out = StringBuilder()
for (p in sorted) {
// append 'p.letter' repeated p.freq times
if (p.freq > 0) {
out.append(p.letter.toString().repeat(p.freq))
}
}
return out.toString()
}
fun main() {
// Input text to analyze
val text = "bbcabddddccafffadbbcdccsedddddhhgade"
// Get sorted frequency list
val sorted = sortByFrequency(text)
// Print each letter and its frequency
for (p in sorted) {
if (p.freq != 0) {
println("${p.letter}: ${p.freq}")
}
}
// Print the reconstructed sorted string
val lettersSortedByFrequency = buildSortedString(sorted)
println("\nSorted string: $lettersSortedByFrequency")
}
/*
run:
d: 12
c: 6
b: 5
a: 4
f: 3
e: 2
h: 2
g: 1
s: 1
Sorted string: ddddddddddddccccccbbbbbaaaafffeehhgs
*/