Алгоритм построения всех реверсивных текстов в 3 слова по заданному словарю
1. По словарю строим хэш (ассоциативный массив), где ключом являются
всевозможные начала слов (длиной до 8 букв), а значение будет
массив слов, где ключ является началом.
Назовём его wbeg.
2. По словарю строим хэш (ассоциативный массив), где ключом являются
всевозможные инвертированные концы слов (длиной до 8 букв),
а значение будет массив сло.в, где встречается такой конец слов.
Назовём его wend.
3. Рассмотри возможные варианты структуры реверсивного текста из 3 слов.
Обозначим три слова как W1 W2 W3 и их длины L1, L2, L3.
Вариант А. L3 > L1.
В этом случае W3 можно представить как W3 = W31 + W32,
где W32 = Rev(W1), где Rev() функция реверсирования текста.
А W2+W31 - должен быть палиндромом. Пусть L31 длина W31.
Вариант A1. L2 > L31 (L1+L2>L3).
В этом случае W2 = W21 + W22, где W21 = Rev(W31), а W22 - палиндром,
то есть W22 = Rev(W22).
Вариант A2. L2 < L31
В этом случае W31 = W311 + W312, где W2 = Rev(W312), а W311 - палиндром,
то есть W311 = Rev(W311)
Вариант A3. L2 == L31
В этом случае W2 = Rev(W31)
Вариант B. L1 > L3.
В этом случае W1 можно представить как W1 = W11 + W12,
где W11 = Rev(W3).
А W12+W2 - должен быть палиндромом. Пусть L12 длина W12.
Вариант B1. L12 > L2
В этом случае W12 = W121 + W122, где W121 = Rev(W2), а W122 - палиндром,
то есть W122 = Rev(W122)
Вариант B2. L12 < L2
В этом случае W2 = W21 + W22, где W12 = Rev(W22), а W21 - палиндром,
то есть W21 = Rev(W21). Или также палиндромом будет W12+W2.
Можно проверять или то или другое на выбор.
Вариант B3. L12 == L2
В этом случае W12 = Rev(W2)
Вариант C. L1 == L3.
В этом случае W1 = Rev(W3) и W2 палиндром, то есть это составной
палиндром, состоящий как 'матрёшка' из двух палинлромов W1+W3 и W2.
Алгоритм на языке Python:
https://combipoet.ru/pdf/palindrom_3_words.pdf