Теперь у вас есть две проблемы .
Вам необходимо тщательно продумать, каков набор возможных строк и каково "правильное" регулярное выражение для каждой входной пары. Я знаю, что сейчас это кажется очевидным, но убедить ваш алгоритм сделать то, что вы ожидаете, может быть сложнее, чем вы думаете. Небольшой TDD всегда хорошая идея: попробуйте подумать о некоторых патологических случаях.
В вашем примере, почему он не должен генерировать что-то вроде одного из них вместо вашего предложения (см. Ответ @ M42 для первого)?:
111(...)222
111(...*)222
111(...+)222
111(..*)222
111(...?)222
(.*)111(.*)222(.*)
etc.
Что бы вы хотели случиться, если бы третья строка была одной из них? Или второй?
1111zzz222
111zzz2222
0111zzz222
111zzz2223
111zzzz222
111zz222
11zzz222
111zzz22
111zzz
zzz222
111xyz222
1z1z1z222
111222
1111222
1112222
etc.
Если (как я подозреваю) вы уже знаете, что некоторые из этих случаев будут невозможны, то вы уже знаете больше о возможной структуре строк, чем позволяете. И если это так, то вам, вероятно, следует просто разобрать строки и сделать это.
Если вы действительно действительно хотите попробовать это в любом случае, то первое, что вам нужно выяснить, это то, хотите ли вы соответствовать " самая длинная общая подпоследовательность " или некоторый вариант " самая длинная общая подстрока" ».
Если вы действительно выполняете это с произвольными строками, то, как только вы считаете, что у вас есть хороший алгоритм, обязательно проверьте его на лоте выборочных данных (что должно быть довольно легко генерировать ...)