gpt4 book ai didi

ruby - 如何检查两个字符串是否包含ruby中的相同字符

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:31 24 4
gpt4 key购买 nike

我想在 ruby​​ 中创建一个单词 unscambler。说如果我在数组中有一个词

 words = ["foo","ofo"]

我如何将它与另一个字符串(如“oof”)进行比较并返回真值

最佳答案

这可以按如下方式完成。

words = ["foo", "ofo", "goo"]
target = "foo"
target_size = target.size
#=> 3
target_sorted = target.each_char.sort
#=> ["f", "o", "o"]

words.select { |w| anagram?(target_size, target_sorted, w) }
#=> ["foo", "ofo"]

anagram?的典型写法是:

def anagram?(target_size, target_sorted, w)
return false unless w.size == target_size
w.each_char.sort == target_sorted
end

但是,我想知道这样做可能会更快:

  • 遍历target的字符
  • w 中搜索匹配字符的索引 i
  • 如果找到匹配项,则删除 w[i]
  • 如果没有找到匹配项(i #=> nil),返回false
  • 如果之前没有返回false,则返回true

这可以这样实现:

def anagram?(target_size, target, w)
return false unless target.size == w.size
wcpy = w.dup
target.each_char do |c|
i = wcpy.index(c)
return false unless i
wcpy[i] = ''
end
true
end

words.select { |w| anagram?(target_size, target, w) }
#=> ["foo", "ofo"]

有一天我必须对这两个进行基准测试。

我们也可以这样写:

def anagram?(w1, w2)
return false unless w1.size == w2.size
w1.chars.difference(w2.chars).empty?
end

助手 Array#difference 定义为 here .

关于ruby - 如何检查两个字符串是否包含ruby中的相同字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29886736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com