Problem Link

Description


Given a string s. In one step you can insert any character at any index of the string.

Return the minimum number of steps to make s palindrome.

Palindrome String is one that reads the same backward as well as forward.

 

Example 1:

Input: s = "zzazz"
Output: 0
Explanation: The string "zzazz" is already palindrome we do not need any insertions.

Example 2:

Input: s = "mbadm"
Output: 2
Explanation: String can be "mbdadbm" or "mdbabdm".

Example 3:

Input: s = "leetcode"
Output: 5
Explanation: Inserting 5 characters the string becomes "leetcodocteel".

 

Constraints:

  • 1 <= s.length <= 500
  • s consists of lowercase English letters.

Solution


Python3

class Solution:
    def minInsertions(self, s: str) -> int:
        N = len(s)
 
        @cache
        def go(i, j):
            if i >= j: return 0
 
            if s[i] == s[j]: return go(i + 1, j - 1)
            
            return 1 + min(go(i + 1, j), go(i, j - 1))
        
        return go(0, N - 1)