我有两个字符串,a
和b
,在 Ruby 中。
a="scar"
b="cars"
a
Ruby中查找是否b
包含相同字符的最简单方法是什么?
更新
我正在构建一个字谜游戏,所以疤痕是汽车的字谜。所以我想要一种比较 a 和 b 的方法并得出结论,它是一个字谜
所以c="carcass"
不应该是匹配的
我有两个字符串,a
和b
,在 Ruby 中。
a="scar"
b="cars"
a
Ruby中查找是否b
包含相同字符的最简单方法是什么?
更新
我正在构建一个字谜游戏,所以疤痕是汽车的字谜。所以我想要一种比较 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
一次排序。然后将其与一堆 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)
Ruby 中查找 a 和 b 是否包含相同字符的最简单方法是什么?
根据Anagram的定义,以下编写的代码应该可以工作:
a="scar"
b="cars"
a.size == b.size && a.delete(b).empty?
require 'set'
Set.new(a.chars) == Set.new(b.chars)
更新以考虑来自sawa的评论