В этом задании вы получите буквенную строку в качестве входных данных. Мы определим «анти-строку» данного ввода как строку со случаем, когда все буквы инвертированы. Например
AaBbbUy -> aAbBBuY
Вы должны написать программу, которая принимает строку в качестве входных данных и ищет самую длинную непрерывную подстроку, чья анти-строка также является непрерывной подстрокой. Две подстроки не должны перекрываться.
В качестве примера, если вам дали строку
fAbbAcGfaBBagF
Части, выделенные полужирным шрифтом, будут самой длинной парой против струн.
Ваша программа должна, после того, как найдет пару, свернуть их в один символ каждый. Это должно быть сделано путем удаления всех, кроме первого символа каждой подстроки. Например строка выше
fAbbAcGfaBBagF
станет
fAcGfagF
Ваша программа должна повторять этот процесс до тех пор, пока самая длинная строковая пара строк не станет одним символом или короче.
Например, работая с той же самой строкой, новая самая длинная пара после коллапса
fAcGfagF
Таким образом, мы снова сворачиваем строку
fAcGag
Теперь строка не может быть свернута дальше, поэтому мы должны вывести ее.
В случае связи между парами-кандидатами (пример AvaVA
) вы можете сделать или сокращение ( AaA
или AvV
, но не Aa
).
Это код-гольф, поэтому ответы будут оцениваться в байтах, причем меньшее количество байтов будет лучше.
Тестовые случаи
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Мотивы
Хотя эта проблема может показаться произвольной, на самом деле это проблема, с которой я столкнулся при создании кода для обработки фундаментальных полигонов. Этот процесс может быть использован для уменьшения основного многоугольника до меньшего n -угольника. После того, как я попробовал это, я думал, что это сделает хороший маленький гольф.
aaaAAAaaa -> aAaaa
?