Skip to content

Instantly share code, notes, and snippets.

@kanmaniselvan
Last active September 8, 2017 16:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kanmaniselvan/ea193a542bf381fa01a36f478c78771b to your computer and use it in GitHub Desktop.
Save kanmaniselvan/ea193a542bf381fa01a36f478c78771b to your computer and use it in GitHub Desktop.
Group array of strings by first common characters
def group_by_common_chars(strings_array)
max_length = strings_array.max_by(&:length).length
char_grouped_hash = (0..max_length).each_with_object({}) do |index, hash|
hash.merge!(strings_array.group_by { |string| string[0..index] }.select{|k, v| k.length == index + 1})
end
index = 0
result_hash = {}
char_grouped_hash.each do |key, values_array|
index += 1
result_hash[key] = values_array.sort
next if 1 == index
values_array.each do |value|
keys = result_hash.select{ |k, v| v.include?(value) && k != key }.keys
if 1 == values_array.size && keys.present?
if result_hash[keys.first].size == 1
result_hash.delete(keys.first)
else
result_hash.delete(key)
end
else
keys.each do |ke|
result_hash[ke].delete(value)
end
end
end
end
result_hash.reject!{|k, value| value.size.zero?}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment