Я работал над проблемой, где цель состоит в том, чтобы взять строку и вернуть самый длинный повторяющийся шаблон, если шаблон присутствует. Например, если строка «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. Помощь будет высоко ценится! :)