Сначала давайте ответим «как мне восстановить решение», а затем сосредоточимся на заказе.Предполагая, что вы сохраняете количество вставок в двумерной матрице insertions[start][stop]
, вам просто нужно пересмотреть ваши шаги, «собирая» символы, вставленные по ходу.Нам понадобится новый массив для хранения выходной строки, длина которого равна нашей стартовой строке плюс минимальное количество вставок.Мы также сохраним два индекса, указывающих на следующие доступные точки спереди и сзади в массиве.
Начнем с сравнения первой и последней букв текущей подстроки и, если они равны, присваивают выходную строку обоимиз них, в следующих доступных позициях спереди и сзади соответственно.Например, если у нас есть FYRF
в качестве текущей подстроки, мы назначим нашу выходную строку F..F
, где .
- неопределенные символы.Тогда наша подстрока становится s[i+1..j-1]
или YR
.
Если два символа не совпадают, мы сравним наши записи в insertions[i+1][j]
и insertions[i][j-1]
, чтобы увидеть, какие из них меньше (хотя бы одиниз них будет ровно на один меньше insertions[i][j]
).Если они равны, просто выберите один (мы вернемся к этому позже).Назначьте символ в нашей выходной строке, который соответствует букве подстроки, которую мы продублировали / вставили, при следующих доступных передних и задних индексах в выходной строке.То есть в случае JLL
, если мы решим добавить J
для JLLJ
, мы возьмем подстроку s[i+1..j]
, поэтому мы сохраним J
и J
в нашей выходной строкеJ..J
.Если бы наша выходная строка уже содержала AR....RA
, мы бы вместо этого сохранили ARJ..JRA
.Мы повторяем весь этот процесс до тех пор, пока не будут назначены все символы.
Теперь, чтобы упорядочить его лексикографически.Что касается случая в предыдущем абзаце, где insertions[i+1][j]
и insertions[i][j-1]
равны, мы не должны выбирать один из них случайным образом.Вместо этого мы должны сравнить s[i]
и s[i+1]
лексикографически, и если s[i]
идет первым, вставить s[i]
в строку вывода / продолжить на insertions[i+1][j]
.В противном случае используйте s[i+1]
/ insertions[i][j-1]
.Это даст нам лексикографически самую раннюю строку из всех доступных вариантов.