Хотя вы можете обнаружить, что данная строка "S" является кандидатом палиндрома, используя данные методы, она все еще не очень полезна. Согласно приведенным реализациям,
isAnagramOfPalindrome ("rrss") вернет true, но фактического палиндрома нет, потому что:
Палиндром - это слово, фраза, число или другая последовательность символов или элементов, значение которых может интерпретироваться одинаково в прямом или обратном направлении. (Википедия)
А Rssr или Srrs не является реальным словом или фразой, которые можно интерпретировать. То же самое с анаграммой. Ааррдд не является анаграммой радара, потому что она не поддается интерпретации.
Таким образом, данные решения должны быть дополнены эвристической проверкой входных данных, чтобы увидеть, является ли это даже словом, а затем проверкой (посредством данных реализаций), что она вообще способна на палиндром. Затем происходит эвристический поиск по собранным сегментам с помощью n / 2! перестановки для поиска, если это на самом деле палиндромы, а не мусор. Поиск только н / 2! и не п! потому что вы вычисляете все перестановки каждой повторяющейся буквы, а затем отражаете их (в дополнение к возможному добавлению единственной буквы поворота), чтобы создать все возможные палиндромы.
Я не согласен с тем, что алгоритм является слишком большим словом, потому что этот поиск может быть выполнен чисто рекурсивно или с использованием динамического программирования (в случае слов с буквами с вхождениями более 2) и не является тривиальным.