这是问题(来自 Codeforces)
Polycarp 经常思考生命的意义。他经常这样做,即使在编辑器中打字也是如此。每次他开始沉思时,他再也无法完全集中注意力,反复按下只需要按一次的键。例如,他可以输入“hhoow aaaare yyououu”来代替短语“你好吗”。
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