检查Ruby中两个字符串内的字符是否相同
我在Ruby中有两个字符串a
和b
。
a="scar" b="cars"
Ruby中最容易找到a
和b
是否包含相同字符的方法是什么?
UPDATE
我正在建造一个Anagram游戏,因此疤痕是汽车的一个字谜。所以我想要一种方法来比较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
仅用于测试数组vs字符串vs删除比较。 假设我们比较长度相等的字符串。
在真正的字谜搜索中,您需要将第一个单词排序一次。 然后将它与一堆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)
但是,如果你每次排序(对于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)
Ruby中最容易找到a和b是否包含相同字符的方法是什么?
根据Anagram的定义,下面编写的代码应该有效:
a="scar" b="cars" a.size == b.size && a.delete(b).empty?
要求'设置' Set.new(a.chars)== Set.new(b.chars)
更新以考虑sawa的评论