Мне задали этот вопрос в интервью:
Имея строку (1‹=|s|‹=10^5), проверьте, можно ли разбить ее на три палиндрома. Если возможных ответов несколько, выведите тот, в котором разрезы сделаны раньше. Если ответ невозможен, выведите «Impossible».
**Input:**
radarnoonlevel
aabab
abcdefg
**Output:**
radar noon level
a a bab (Notice how a, aba, b is also an answer, but we will output the one with the earliest cuts)
Impossible
Я смог дать решение грубой силы, запустив два цикла и проверив свойство палиндрома для каждых 3 подстрок (0-i, i-j, j-end). Это было явно не оптимально, но с тех пор я не смог найти лучшего решения.
Мне нужен способ проверки того, что если я знаю свойство палиндрома строки, то как удаление символа в начале или добавление символа в конце может дать мне свойство новой строки без необходимости выполнять проверку для всей строки опять таки. Я думаю об использовании трех карт, где каждая клавиша символа сопоставляется с количеством вхождений, но это тоже меня ни к чему не приводит.