How to display string letters sorted by frequency in Ruby

1 Answer

0 votes
# sortByFrequency — counts how often each letter appears and returns a sorted list
def sort_by_frequency(s)
  # Create a frequency array for 26 lowercase letters, initialized to 0
  freq = Array.new(26, 0)

  # Iterate through the string and count only alphabetic characters
  s.each_char do |c|
    if c =~ /[A-Za-z]/
      lower = c.downcase
      index = lower.ord - 'a'.ord
      freq[index] += 1
    end
  end

  # Build an array of [letter, frequency] pairs
  result = []
  26.times do |i|
    result << [("a".ord + i).chr, freq[i]]
  end

  # Sort pairs by frequency in descending order
  result.sort_by! { |letter, count| -count }

  result
end

# Build a string sorted by frequency: ddddddddddddccccccbbbbbaaaafffeehhgs
def build_sorted_string(sorted)
  out = ""

  sorted.each do |letter, count|
    # append 'letter' repeated count times
    out << letter * count if count > 0
  end

  out
end

# Input text to analyze
text = "bbcabddddccafffadbbcdccsedddddhhgade"

# Get sorted frequency list
sorted = sort_by_frequency(text)

# Print each letter and its frequency
sorted.each do |letter, count|
  puts "#{letter}: #{count}" if count != 0
end

# Print the reconstructed sorted string
letters_sorted_by_frequency = build_sorted_string(sorted)
puts "\nSorted string: #{letters_sorted_by_frequency}"



=begin
run:

d: 12
c: 6
b: 5
a: 4
f: 3
e: 2
h: 2
g: 1
s: 1

Sorted string: ddddddddddddccccccbbbbbaaaafffeehhgs

=end

 



answered 2 days ago by avibootz

Related questions

...