Алгоритм не находит минимальное количество вставок во время сортировки вставок, а просто дает верхнюю границу количества вставок.Это легко проверить, просто запустив алгоритм в строке «abc» и увидев, что результат равен 2, а реальный минимум вставок равен 0.
Давайте посмотрим на рекурсивный шаг:
if(str[l] == str[h]):
return findMinInsertions(str, l + 1, h - 1)
else:
return (min(findMinInsertions(str, l, h - 1),
findMinInsertions(str, l + 1, h)) + 1)
если str [l] == str [h], минимальное количество вставок задается значениями символов между ними, потому что str [l] и str [h] могут оставаться в их относительном положении (т.е.str [h] останется справа от str [l]), поэтому мы будем перемещать / вставлять только символы между индексами l и h.
Как только вы поймете, что происходит в равном случае, вы можетепонимать, что в случае неравенства есть шанс перемещения одного из символов str [l] или str [h].
Обратите внимание , что, поскольку это толькошанс перемещения символа, алгоритм выдает верхнюю границу количества вставок, а не минимальную.