You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
773 B
Ruby

# Given a single input string, write a function that produces all possible anagrams
# of a string and outputs them as an array. At first, don't worry about
# repeated strings. What time complexity is your solution?
#
# Extra credit: Deduplicate your return array without using uniq().
#
def anagrams(word)
return false unless word.is_a?(String)
return [word] if word.length == 1
all_anagrams = Set.new
(0...word.length).each do |i|
current_letter = word[i]
partial_anagram = anagrams(word[0...i] + word[i + 1..-1])
(0...partial_anagram.length).each do |j|
full_anagram = current_letter + partial_anagram[j]
all_anagrams << full_anagram
end
end
all_anagrams.to_a
end
# word.split("").combinations.map { |anagram| anagram.join }