Используйте эту рекурсию динамического программирования:
Соответствие (i, j) = Соответствие (i-1, j) И (Z [i + j] == X [i]) ИЛИ Соответствие (i,j-1) AND (Z [i + j] == Y [j])
Это даст двумерную двоичную матрицу.Если между концом и началом есть путь (непрерывный True, только вверх или влево, а не поперек), существует решение (решение, полученное путем перевода соответствий X и слева в Y).
PS: использоватьследующая функция и матрица автоматически запомнят путь:
Match(i,j) =
if Match(i-1,j) AND (Z[i+j] == X[i]):
1
elif Match(i,j-1) AND (Z[i+j] == Y[j]):
2
else:
0