給定兩個字符串,我想確定它們是否是另一個字符串。這裏是我想出的解決方案:快速解析字典
# 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)
更有效率?
對不起,我打算把'n log n'放在筆記裏,我只是把錯誤的公式複製到了問題中。 – 2013-03-12 23:14:54
+1。嚴格來說,計數解決方案是O(max(n,| alphabet |))。字母表的大小在技術上是不變的,但是如果字母表是unicode並且字符串不大,它將佔主導地位。 – rici 2013-03-12 23:15:10
計數解決方案,通過兩個字符串迭代散列每個字符,並更新它的計數,當你走?我有點認爲這個問題總是'O(n)',因爲比較總是被整個字符串長度所限制。 – 2013-03-12 23:15:59