Как я могу вычислить минимальное количество замен, чтобы преобразовать строку в палиндром?

#string #dynamic-programming #palindrome

#строка #динамическое программирование #палиндром

Вопрос:

В вопросе говорится о преобразовании строки в палиндром путем замены символов в строке. Длина сформированной строки палиндрома должна быть такой же, как у исходной строки.

Например: строка abcde для преобразования в палиндром,

минимальное количество замен: 2

abcde -> abcba

А что, если для этого требуется, чтобы определенная подстрока была частью результирующей палиндромной строки?

Пример: строка требует, чтобы подстрока «tea» была частью результирующей строки

затем abcdef -> aettea

минимальная замена: 4

Ответ №1:

Палиндромы по определению одинаковы по обе стороны от их центральной точки.

Для строки с нечетными буквами максимальная длина строки минус один и деленная на два даст вам количество символов для замены.

 (length - 1) / 2 = #charsReplaced
 

Для строки с четной длиной максимальная длина заменяемых символов равна длине, деленной на два.

 length / 2 = #charsReplaced
 

Поиск минимального количества символов для замены потребовал бы чтения в строке каждым символом, сопоставления символов с каждой стороны центральной точки строки и определения того, какие из них похожи. Для каждого, у которого уже есть похожая буква на каждой стороне (например, у abcbe на 1 меньше максимального значения), вы отделяете это количество от максимального.

Ответ №2:

Это логическая проблема, но я думаю, вы можете вычислить ее, используя этот алгоритм, который я разработал:

  • прочитайте строку, например: abcde
  • получаем первую половину (ab)
  • проверьте обратную сторону другой половины, если она соответствует вашей первой половине (ab равно de?)
  • подсчитайте неравные символы
  • ответ = 2
  • пример: radaa
    firsthalf: ra
    проверяет обратную сторону другой половины:
    совпадение aa, если равно: ra = aa
    подсчитайте количество неравных символов: 1
    замена: a = r
    тогда вы получили свой результат: радар, ошибка 1 символа.