gpt4 book ai didi

ruby - 确定集合中是否存在前缀

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:17 24 4
gpt4 key购买 nike

给定一组字符串,说:

"Alice"
"Bob"
"C"
"Ca"
"Car"
"Carol"
"Caroling"
"Carousel"

给定一个字符串,说:

"Carolers"

我想要一个返回数组中不存在的最小前缀的函数。

对于上面的例子,函数应该返回:“Caro”。 (后续调用将返回“Carole”)

我是 Ruby 的新手,虽然我可能会破解出一些丑陋的东西(使用我的 C/C++/Objective-C 大脑),但我想学习如何正确(优雅地?)编写代码。

最佳答案

Ruby 中有一个鲜为人知的神奇模块,叫做Abbrev。 .

require 'abbrev'

abbreviations = Abbrev::abbrev([
"Alice",
"Bob",
"C",
"Ca",
"Car",
"Carol",
"Caroling",
"Carousel"
])
carolers = Abbrev::abbrev(%w[Carolers])
(carolers.keys - abbreviations.keys).sort.first # => "Caro"

上面我使用了第一个元素,但这显示了其他可用的元素。

pp (carolers.keys - abbreviations.keys).sort 
# >> ["Caro", "Carole", "Caroler", "Carolers"]

将以上所有内容包装在一个函数中,计算得到的缺失元素,然后迭代它们将它们生成一个 block ,或者使用枚举器逐个返回它们。

这是为单个单词生成的。对于数组,它更复杂。

require 'pp'
pp Abbrev::abbrev(['cat'])
# >> {"ca"=>"cat", "c"=>"cat", "cat"=>"cat"}

pp Abbrev::abbrev(['cat', 'car', 'cattle', 'carrier'])
# >> {"cattl"=>"cattle",
# >> "catt"=>"cattle",
# >> "cat"=>"cat",
# >> "carrie"=>"carrier",
# >> "carri"=>"carrier",
# >> "carr"=>"carrier",
# >> "car"=>"car",
# >> "cattle"=>"cattle",
# >> "carrier"=>"carrier"}

关于ruby - 确定集合中是否存在前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5402064/

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