Имеются два шаблона. Требуется найти строку минимальной длины,
которая удовлетворяет обоим шаблона, либо выдать сообщение, что такой
строки не существует.
Входные данные
Заданные шаблоны записаны в первых двух строках входного файла. Длина
каждого шаблона не превосходит 80 символов.
Выходные данные
В выходной файл следует вывести минимальную длину строки,
удовлетворяющую обоим шаблонам, либо -1, если такой строки не
существует.
Пример входного файла
A*
*B
Пример выходного файла
2
Вычисляем значения F(i, j) в порядке возрастания i, а при равных i – в
порядке возрастания j. Возможны следующие ситуации (мы считаем, что i, j > 0,
разбор граничных случаев проведите самостоятельно):
S[i] и T[j] – буквы. Если они совпадают, то в качестве F(i, j) берем значение
F(i-1, j-1) с дописанной в конце этой буквой. Если в F(i-1, j-1) стоит пометка
«строки не существует», то аналогичная пометка ставится и в F(i, j). В случае
несовпадения букв S[i] и T[j] нужная строка также не существует.
S[i] и T[j] – буква и символ ? или два символа ?. Поступаем точно так же,
как и в предыдущей ситуации, однако случая несовпадения букв из-за наличия
? здесь быть не может.
S[i] – символ *, T[j] – буква или символ ?. Выбираем наиболее короткое
среди значений F(i-1, j) и F(i, j-1) с дописанной к нему буквой T[j] (или любой
буквой, если T[j] есть символ ?).
S[i] – буква или символ ?, T[j] – символ *. Поступаем аналогично
ситуации 3.
S[i] и T[j] – два символа *. В этой ситуации в качестве F(i, j) берем
наиболее короткое из значений F(i, j-1) и F(i-1, j).
Упражнение
Решите задачу, храня в F(i, j) не кратчайшую строку, а только ее длину (или
пометку -1, если такой строки не существует).