Отказ от ответственности: эта проблема снята с сайта HackerRank, но их редакционный ответ был недостаточным, поэтому я надеялся получить ответы получше. Если это противоречит какой-либо политике, пожалуйста, дайте мне знать, и я уберу это.
Задача. Даны два целых числа, N и M. Подсчитайте количество строк длины N в алфавитном наборе размера M, не содержащем ни одной строки-палиндрома длины больше 1, как последовательная подстрока.
N=2,M=2 -> 2 :: AA, AB, BA, BB
N=2,M=3 -> 6 :: AA, AB, AC, BA, BB, BC, CA, CB, CC
ABCDE считается, так как не содержит палиндромных подстрок.
ABCCC не считается, так как содержит «CCC», палиндром длины >1.
От редакции Вот предоставленный ответ, который я считаю неправильным:
При N>=3 существует (M−2) способов выбрать любой следующий символ (после первых двух) - в принципе он не должен совпадать с предыдущим и пред-предыдущим символами, которые не равны.
If N=1, return M
If N=2, return M * (M-1)
If N>=3, return M * (M-1) * (M-2)^(N-2)
контрпример: N=4, M=3, "ABCC"
Попробуйте мое решение Когда я работал над этой задачей, я пытался найти все строки, содержащие подстроки-палиндромы, и вычесть их из общего числа, M^N. Я столкнулся с большим количеством проблем с пересчетом. Например, «ABABA» имеет «ABA», «BAB», «ABA» из n = 3 и «ABABA» из n = 5.
Спасибо за любую помощь в разъяснении этой проблемы. Я очень надеюсь на хороший ответ, чтобы понять это!
CC
и нарушает указанное ограничение на строки без палиндромов, поскольку имеет букву, идентичную предыдущей букве. Вроде бы все так, как написано в решении. - person user2357112 supports Monica   schedule 21.05.2015