Есть несколько разных способов решения данной задачи. Вот пример двух:
- Заметим, что одну строку можно преобразовать в другую применением шифра Цезаря тогда и только тогда, когда разности кодов соседних символов у обеих строк совпадают. Формально, строка $$$s$$$ преобразуется в строку $$$t$$$ тогда и только тогда, когда для любого $$$i$$$ выполняется условие $$$s_i - s_{i + 1} = t_i - t_{i + 1}$$$. Таким образом можно построить массивы $$$ds_i = s_i - s_{i + 1}$$$ и $$$dt_i = t_i - t_{i + 1}$$$, а затем проверить что $$$ds$$$ является циклическим сдвигом $$$dt$$$. Что можно сделать за O($$$n$$$) с использованием хэшей, Z-функции или префикс функции.
- Либо можно было заметить, что всего бывает $$$|25 - (-25) + 1| = 51$$$ различных значений параметра шифра Цезаря $$$d$$$. Можно перебрать это значение, применить преобразование, а затем аналогично предыдущему способу проверить является ли одна строка циклическим сдвигом другой.