Ваш код находится на правильном пути, если вы не возражаете против относительно медленного алгоритма; есть более сложный подход к проблеме, с динамическим программированием, если вам нужно, чтобы это было быстрее.
В данный момент ошибка в вашем коде заключается в том, что вы перемещаетесь по длине обеих строк одновременно с каждым рекурсивным вызовом. Например, произойдет сбой (я думаю, я не пробовал) со следующими двумя строками: (LCS "scheme" "emesch")
Причина в том, что совпадающие подстроки не начинаются в одной и той же позиции в первой и второй строке.
Я предлагаю вам разделить рекурсию на два рекурсивных вызова: один, в котором вы удаляете символ с передней части только первой строки, и один, где вы удаляете символ с передней части только второй. Затем вы получаете лучший результат от любого из этих вызовов. Таким образом, вы можете быть уверены, что найдете подстроки независимо от того, где они находятся в другой строке.