Common Characters

# Challenge name: Find Common Characters
#
# Given an array A of strings made only from lowercase letters, return a list
# of all characters that show up in all strings within the list
# (including duplicates).  For example, if a character occurs 3 times in all
# strings but not 4 times, you need to include that character three times in
# the final answer.
#
# You may return the answer in any order.
#
# Example 1:
# Input: ["bella","label","roller"]
# Output: ["e","l","l"]
#
# Example 2:
# Input: ["cool","lock","cook"]
# Output: ["c","o"]

#
# Approach 1: Hash
#
# Time Complexity: O(n)
#
def common_characters(arr)
  target_count = arr.count

  hash = Hash.new(0)
  (0...target_count).each do |i|
    arr[i].split('').each do |letter|
      hash[letter] += 1
    end
  end

  result = []
  hash.each do |k, v|
    while v >= target_count
      if v >= target_count
        result << k
        v -= target_count
      end
    end
  end

  result
end

puts common_characters(%w[bella label roller])
# => ["e","l","l"]

puts common_characters(%w[cool lock cook])
# => ["c","o"]
Algerlogo

Β© Alger 2022

About us

We are a group of programmers helping each other build new things, whether it be writing complex encryption programs, or simple ciphers. Our goal is to work together to document and model beautiful, helpful and interesting algorithms using code. We are an open-source community - anyone can contribute. We check each other's work, communicate and collaborate to solve problems. We strive to be welcoming, respectful, yet make sure that our code follows the latest programming guidelines.