我有两个字符串,a并且b,在Ruby中.
a="scar"
b="cars"
Run Code Online (Sandbox Code Playgroud)
什么是Ruby的最简单的方法来寻找是否a和b包含相同字符?
更新
我正在构建Anagram游戏,因此疤痕是汽车的字谜.所以我想要一种比较a和b的方法,并得出结论它的anagram
所以c="carcass"不应该是匹配
tor*_*o2k 10
你可以这样做:
a = 'scar'
b = 'cars'
a.chars.sort == b.chars.sort
# => true
a = 'cars'
b = 'carcass'
a.chars.sort == b.chars.sort
# => false
Run Code Online (Sandbox Code Playgroud)
仅用于测试数组vs字符串vs删除比较.假设我们比较长度相等的字符串.
在真正的字谜搜索中,您需要对第一个单词进行排序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
Run Code Online (Sandbox Code Playgroud)
结果:
user system total real
string 6.030000 0.010000 6.040000 ( 6.061088)
arrays 6.420000 0.010000 6.430000 ( 6.473158)
Run Code Online (Sandbox Code Playgroud)
但是,如果你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 }
Run Code Online (Sandbox Code Playgroud)
结果是:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4547 次 |
| 最近记录: |