【发布时间】:2013-02-28 17:13:49
【问题描述】:
给定两个字符串,我想确定它们是否是彼此的字谜。这是我想出的解决方案:
# output messages
def anagram
puts "Anagram!"
exit
end
def not_anagram
puts "Not an anagram!"
exit
end
# main method
if __FILE__ == $0
# read two strings from the command line
first, second = gets.chomp, gets.chomp
# special case 1
not_anagram if first.length != second.length
# special case 2
anagram if first == second
# general case
# Two strings must have the exact same number of characters in the
# correct case to be anagrams.
# We can sort both strings and compare the results
if first.chars.sort.join == second.chars.sort.join
anagram
else
not_anagram
end
end
但我认为可能有更好的。我分析了这个方案的效率,得出了:
-
chars:将字符串拆分为字符数组O(n) -
sort:按字母顺序对字符串进行排序,我不知道在 Ruby 中排序是如何实现的,但我假设O(n log n),因为这是众所周知的排序效率 -
join:从字符数组构建一个字符串O(n) -
==:字符串比较本身必须检查字符串2*O(n)的每个字符
鉴于上述情况,我将整个解决方案的效率归类为O(n log n),因为排序效率最高。有没有比O(n log n) 更有效的方法来做到这一点?
【问题讨论】:
标签: ruby algorithm big-o anagram