Палиндромы - это весело, но некоторые другие нити начинают чувствовать себя обделенными. Мы можем превратить эти строки в короткие палиндромы , разбив их на палиндромные массивы частей.
Например, строка "abcabca"
не является палиндромом, если мы читаем ее символ за символом, но у нас есть три различных способа сделать ее коротким палиндромом:
["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]
Как видите, коренастая палиндромность - это очень всеобъемлющее понятие; каждая строка может быть превращена в коренастый палиндром хотя бы одним способом.
задача
Напишите программу или функцию, которая получает строку в качестве входных данных и возвращает ее палиндромный массив , т. Е. Количество его разделов, которые являются палиндромными массивами.
Контрольные примеры
OUTPUT | INPUT
--------+---------------------------------------------
1 | ""
1 | "a"
1 | "ab"
2 | "aa"
2 | "aaa"
3 | "abcabca"
4 | "abababab"
28 | "abcabcaabababababcabca"
1 | "bbbbabababbbbababbbaaaaa"
20 | "ababbaaaabababbbaaabbbaa"
5 | "baaabaabababaababaaabbaab"
62 | "bbaaababbabbabbbabaabaabb"
2 | "a man a plan a canal panama"
25 | "ama nap lan aca nal pan ama"
93 | "SATOR AREPO TENET OPERA ROTAS"
976 | "abcabcaabcabcaabcabcaabcabcaabcabcaabcabca"
28657 | "ababababababababababaababababababababababa"
2097152 | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Дополнительные правила
Вы можете предполагать, что ввод будет состоять из 42 или менее печатных символов ASCII, опционально окруженных разделителями строк вашего языка и / или сопровождаемых новой строкой.
Для каждой допустимой входной строки ваш код должен завершиться менее чем за одну минуту на моем компьютере (Intel Core i7-3770, 16 ГБ ОЗУ, Fedora 21).
С адекватным алгоритмом должно быть легко соответствовать этому временному пределу. Однако вы, скорее всего, не сможете перебирать все разделы входной строки.
Если вы решите распечатать вывод в STDOUT, за ним может следовать одна новая строка.
Применяются стандартные правила игры в гольф .