检查Ruby中两个字符串内的字符是否相同

Sto*_*rux 2 ruby

我有两个字符串,a并且b,在Ruby中.

a="scar"
b="cars"
Run Code Online (Sandbox Code Playgroud)

什么是Ruby的最简单的方法来寻找是否ab包含相同字符?

更新
我正在构建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)

  • @YevgeniyAnfilofyev但这不是不平等; 这是平等的.两个数组包含不同元素的时刻,比较将终止.而`join`则是一项额外的操作.你的索赔有数字基础吗? (3认同)
  • 刚刚添加了一个帖子 (2认同)

Yev*_*yev 9

仅用于测试数组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)