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