132-palindrome-partitioning-ii

Try it on leetcode

Description

Given a string s, partition s such that every substring of the partition is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

 

Example 1:

Input: s = "aab"
Output: 1
Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut.

Example 2:

Input: s = "a"
Output: 0

Example 3:

Input: s = "ab"
Output: 1

 

Constraints:

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

Solution(Python)

class Solution:
    def minCut(self, s: str) -> int:
        n = len(s)
        @cache
        def isPlaindrome(i,j):
            if i >= j:
                return True
            if s[i] != s[j]:
                return False
            return isPlaindrome(i+1,j-1)
        @cache
        def dfs(i):
            if i == n:
                return 0
            
            res = float('inf')
            
            for j in range(i,n):
                if isPlaindrome(i,j):
                    res = min(res, 1+dfs(j+1))
            return res
        return dfs(0) - 1