我一直在解决一个问题,即将一个字符串作为输入,如果存在重复的模式,则返回最长的重复模式。例如,如果字符串是"aabbbaa",则应返回"yes aa"。如果字符串是"aavbbbvaabbb",则应返回"yes bbb"。我查看了别人的解决方案,并相信理解了除了这一行代码之外的每个代码片段的含义:
以下是整个解决方案:
copy[idx..idx2]=""
。以下是整个解决方案:
def PatternChaser(str)
patterns = {}
(0..str.length-1).each do |idx|
(idx + 1..str.length - 1).each do |idx2|
copy = str.dup
chunk = str[idx..idx2]
len = chunk.length
copy[idx..idx2] = ""
patterns[chunk] = len if copy.include?(chunk) && !patterns.include?(chunk)
end
end
return "no null" if patterns.empty?
patterns.each { |k,v| return "yes" + " " + k if v == patterns.values.max }
end
puts PatternChaser(STDIN.gets)
如果这是相当常见的语法,请原谅我。我编程不到一年,迄今为止还没有在StackOverflow上找到答案。非常感谢您的帮助! :)
idx
和idx2
之间的字符串内容,因此你将删除字符。 - Willem Van Onsemarray[index]
看起来有点误导,因为copy
是一个字符串,而idx..idx
是一个范围。 - Stefan