我有兩個字符串,a
和b
,在Ruby中。檢查兩個字符串中的字符在Ruby中是相同的
a="scar"
b="cars"
什麼是Ruby的最簡單的方法找到a
和b
是否包含相同字符?
UPDATE
我建立一個字謎遊戲,所以疤痕是cars.So的字謎我希望有一個方法來比較A和B,並得出結論,其字謎
所以c="carcass"
不應該是一個比賽
我有兩個字符串,a
和b
,在Ruby中。檢查兩個字符串中的字符在Ruby中是相同的
a="scar"
b="cars"
什麼是Ruby的最簡單的方法找到a
和b
是否包含相同字符?
UPDATE
我建立一個字謎遊戲,所以疤痕是cars.So的字謎我希望有一個方法來比較A和B,並得出結論,其字謎
所以c="carcass"
不應該是一個比賽
你可以這樣做:
a = 'scar'
b = 'cars'
a.chars.sort == b.chars.sort
# => true
a = 'cars'
b = 'carcass'
a.chars.sort == b.chars.sort
# => false
我認爲'a.chars.sort.join == b.chars.sort.join'更好,因爲比較數組比比較字符串更耗時。只是一個筆記;) –
@YevgeniyAnfilofyev但這不是不平等;它是平等的。當兩個數組包含不同的元素時,比較將終止。而'join'是一個額外的操作。你的索賠有數字基礎嗎? – sawa
剛剛添加了一個帖子 –
Ruby中最簡單的方法是找出a和b是否包含相同的字符?
爲每Anagram的定義寫在下面的代碼應該工作:
a="scar"
b="cars"
a.size == b.size && a.delete(b).empty?
你應該確定兩個字符串的長度是相同的,否則在你的代碼中'a =「scar」'和'b =「carse」'返回'true'。 –
@YevgeniyAnfilofyev是的..那個OP沒有放..如果字符串不具有相同的長度,它會失敗..OP只是爲了測試它們是否包含相同的章程。就是這樣。 –
但是對於現實世界,當您搜索字謎時,它會起作用,因爲您可以在比較之前跳過長度不同的字詞。所以 - +1 :) –
只是用於測試陣列VS串VS刪除比較。假設我們比較長度相等的字符串。
在真正的anagram搜索中,您需要先排序第一個字a
一次。然後將它與b的一堆進行比較。
a="scar"
b="cars"
require 'benchmark'
n = 1000000
Benchmark.bm do |x|
x.report('string') { a = a.chars.sort.join; n.times do ; a == b.chars.sort.join ; end }
x.report('arrays') { a = a.chars.sort; n.times do ; a == b.chars.sort ; end }
end
結果:
user system total real
string 6.030000 0.010000 6.040000 ( 6.061088)
arrays 6.420000 0.010000 6.430000 ( 6.473158)
但是,如果你排序a
每個時間(delete
我們不需要排序任何文字):
x.report('string') { n.times do ; a.chars.sort.join == b.chars.sort.join ; end }
x.report('arrays') { n.times do ; a.chars.sort == b.chars.sort ; end }
x.report('delete') { n.times do ; a.delete(b).empty? ; end }
結果是:
user system total real
string 11.800000 0.020000 11.820000 (11.989071)
arrays 11.210000 0.020000 11.230000 (11.263627)
delete 1.680000 0.000000 1.680000 ( 1.673979)
看到基準總是很好的。 –
你可以將我的一個加入你的* benchmark *報告嗎? :) –
插入你的變種在第二benchmar。對於第一個基準來說,它是一樣的。這是令人難以置信的更快;)需要調查'刪除'的算法,然後... –
你想如何? o處理重複的字符?例如'c =「胴體」',是a和b的匹配嗎?事實上,你是否想要一個「真/假」響應,或者交叉口。你可以用代碼輸出示例輸出,而不是模糊的「它應該說」嗎? –
http://stackoverflow.com/q/9646995/1301972或http://stackoverflow.com/q/16631961/1301972可能出現重複,或通過其答案之一回答。 –
@CodeGnome正是我在找什麼。其實我正在嘗試手動創建hash當group_by已經在那裏。紅寶石roxx! – Stormvirux