Как эффективно определить самый длинный индивидуальный палиндром в заданной строке?

Дана строка длины N, содержащая символы [A-Z], как определить самый длинный палиндром для отдельного символа?

Я проиллюстрирую это на примере:

Дана строка: JOHNOLSON Анализируя строку, мы обнаруживаем, что у нас есть палиндром с символом O такой, что строка выглядит как JOHNOLSON. Палиндром для O имеет длину 7 и выглядит как O--O--O. Также обратите внимание, что существует палиндром с N, но его длина всего 6.

Другой пример, Дана строка: ABCJOHNOLSON дает тот же результат, что и выше, с палиндромом из O длины 7, который выглядит как O--O--O.

Однако в данной строке ABCJOHNOLSONDA самый длинный индивидуальный символьный палиндром имеет длину 14 с символом A и выглядит как A------------A.

Другие простые примеры включают:

ABA --> A-A (длина 3)

ABAXYZ --> A-A (длина 3)

ABAXYZA --> A---A (длина 5), не длина 7, потому что A-A---A не является палиндромом для буквы A.

Обратите особое внимание на последний пример, поскольку он иллюстрирует один из тонких нюансов проблемы.

8
задан jbranchaud 20 November 2011 в 19:01
поделиться