# sortByFrequency — counts how often each letter appears and returns a sorted list
def sortByFrequency(s: str):
# Create a frequency array for 26 lowercase letters, initialized to 0
freq = [0] * 26
# Iterate through the string and count only alphabetic characters
for c in s:
if c.isalpha():
# Convert to lowercase and map 'a'..'z' to 0..25
freq[ord(c.lower()) - ord('a')] += 1
# Build a list of (letter, frequency) pairs
result = [(chr(ord('a') + i), freq[i]) for i in range(26)]
# Sort pairs by frequency in descending order
result.sort(key=lambda p: p[1], reverse=True)
return result
# Build a string sorted by frequency: ddddddddddddccccccbbbbbaaaafffeehhgs
def buildSortedString(sorted_list):
out = []
for letter, count in sorted_list:
# append 'letter' repeated count times
if count > 0:
out.append(letter * count)
return "".join(out)
def main():
# Input text to analyze
text = "bbcabddddccafffadbbcdccsedddddhhgade"
# Get sorted frequency list
sorted_list = sortByFrequency(text)
# Print each letter and its frequency
for letter, count in sorted_list:
if count != 0:
print(f"{letter}: {count}")
# Print the reconstructed sorted string
letters_sorted_by_frequency = buildSortedString(sorted_list)
print("\nSorted string:", letters_sorted_by_frequency)
if __name__ == "__main__":
main()
"""
run:
d: 12
c: 6
b: 5
a: 4
f: 3
e: 2
h: 2
g: 1
s: 1
Sorted string: ddddddddddddccccccbbbbbaaaafffeehhgs
"""