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

时间:2013-07-23 13:51:20

标签: ruby

我在Ruby中有两个字符串ab

a="scar"
b="cars"

Ruby中最简单的方法是查找ab是否包含相同的字符?

更新
我正在建造一个Anagram游戏,因此疤痕是汽车的一个字谜。所以我想要一种方法来比较a和b并得出它的一个字谜的结论 因此c="carcass"不应该匹配

4 个答案:

答案 0 :(得分:10)

你可以这样做:

a = 'scar'
b = 'cars'
a.chars.sort == b.chars.sort
# => true

a = 'cars'
b = 'carcass'
a.chars.sort == b.chars.sort
# => false

答案 1 :(得分:8)

仅用于测试数组与字符串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

结果:

          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)

答案 2 :(得分:3)

  

Ruby中查找a和b是否包含相同字符的最简单方法是什么?

根据Anagram的定义,下面编写的代码应该有效:

a="scar"
b="cars"
a.size == b.size && a.delete(b).empty?

答案 3 :(得分:1)

require 'set'
Set.new(a.chars) == Set.new(b.chars)

已更新,以考虑sawa的评论