Известные алгоритмы
этого вроде не учитывают.
Потому что "с учетом циклического сдвига и переименования букв" - это уже не поиск подстроки, а поиск совпадения с регулярным выражением.
В общем случае строится конечный автомат, который парсит входную строку и ищет совпадение.
Компиляторы регулярных выражений так и делают - генерируют конечный автомат. Если Ваш случай не описывается хорошо стандартными регулярными выражениями, то придётся самому создавать конечный автомат для парсинга.
-- 04.12.2021, 01:02 --Регулярные выражения - это вариант попроще.
Более сильный вариант - это парсить грамматику.
В стандартном наборе GNU есть утилита
Flex. Ей передают описание грамматики языка (наприме C/C++, Java, XML и т.д.) и она создаёт C-код с конечным автоматом для парсинга входного текста на этом языке.