gpt4 book ai didi

Ruby 正则表达式从字符串中删除所有连续的字母

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:46 25 4
gpt4 key购买 nike

这是问题(来自 Codeforces)

波利卡普经常思考生命的意义。他经常这样做,甚至在编辑器中输入时也是如此。每次他开始沉思时,他就再也无法完全集中注意力,反复按下只需要按一次的键。例如,他可以输入“hhoow aaaare yyoouu”而不是短语“你好吗”。

Polycarp 决定自动化纠正此类错误的过程。他决定为文本编辑器编写一个插件,删除成对的相同连续字母(如果文本中有的话)。当然,这并不是波利卡普所需要的,但他必须从一些事情开始!

帮助Polycarp,编写主要的插件模块。您的程序应该从字符串中删除所有连续的相同字母对。如果删除后出现新的对,程序也应该删除它们。从技术上讲,它的工作应该等同于:当字符串包含一对连续的相同字母时,应该删除这对字母。请注意,可以按任何顺序删除连续的相同字母,因为任何顺序都会导致相同的结果。

这是我的解决方案.. 由于某种原因,它无法通过一个非常大的测试用例。我的似乎摆脱了比预期更多的字母。这个正则表达式不正确吗?

str = gets.chomp

while str =~ /(.)\1/
str.gsub!(/(.)\1+/,'')
end

puts str

编辑——这个解决方案不起作用,因为它去掉了所有连续的字符组。它应该只消除重复项。如果我这样做,我认为这是正确的,它会在非常大的字符串上超时:

str = gets.chomp

while str =~ /(.)\1/
str.gsub!(/(.)\1/,'')
end

puts str

最佳答案

为什么一定要是正则表达式?

'foobar'.squeeze
=> "fobar"

"hhoow aaaare yyoouu".squeeze
=> "how are you"

squeeze是压缩所有字符或特定字符运行的有用工具。以下是来自 the documentation 的一些示例:

"yellow moon".squeeze                  #=> "yelow mon""  now   is  the".squeeze(" ")         #=> " now is the""putters shoot balls".squeeze("m-z")   #=> "puters shot balls"

如果“aab”变成“b”,那么你就没有遵循问题中给出的例子,即“hhoow”变成“how”。根据您的说法,它将是“w”,而“yyoouu”将是“”。我认为您读得太多了,没有根据他们的示例输入和示例输出理解问题。

关于Ruby 正则表达式从字符串中删除所有连续的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650302/

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