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
- sconsists 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