Слово было зашифровано шифром цезаря. получилось мпцщьуъпо. расшифруйте его. используйте алфавит, состоящий из 33 букв. ответ запишите заглавными буквами.
139
303
Ответы на вопрос:
Наивный алгоритм: используя два вложенных цикла, проверить все подстроки, являются ли они палиндромами. такой алгоритм будет работать o(|s|^2), что при ограничении |s| < = 10^5 потребует примерно 10^10 / 2 сравнений, что достаточно долго. оптимизация: в центре у палиндрома четной длины всегда пара одинаковых символов. их можно найти, а затем увеличивать длину до тех пор, пока это возможно. плюс этого наблюдения в том, что если пара попадется не в центре, то максимальная длина подстроки-палиндрома с центром в этой паре, будет ограничена сверху. однако в худшем случае (все символы одинаковы) всё равно придется произвести немалое число сравнений. однако можно решить и за линейное время. например, существует алгоритм манакера, основанный на том, что можно использовать информацию, что часть строки является палиндромом. а именно, если в длинную-длинную строку-палиндром входит другая подстрока-палиндром, то можно не начинать проверку заново, а использовать уже имеющуюся информацию. пример 1: "длинная" подстрока-палиндром: c bbaabbaabbc в которой известна подстрока-палиндром. тогда в строке есть симметричная подстрока-палиндром: cbbaa bbaabbc пример 2: "длинная" подстрока палиндром: bbaabbaabbaa зная, что в ней есть подстрока-палиндром bbaabbaabbaa, можно явные сравнения для подстроки с центром в bbaabb aabbaa начинать уже с bbaa bbaabbaa если не хочется писать самостоятельно, алгоритм манакера легко находится.
Популярно: Информатика
-
ttappok10.04.2021 16:44
-
BackTiger00721.02.2021 05:02
-
Temosha10101029.10.2021 17:09
-
Boss200927.08.2020 19:28
-
alexssrus124.11.2020 12:29
-
twenty2127.06.2020 08:30
-
DoodleCrazy22.10.2020 02:20
-
8888щоолзлтлжд17.10.2022 04:21
-
СлаваКпсс1104.06.2021 15:44
-
Catiy17.07.2021 04:29