1. 程式人生 > >lintcode練習-108. 分割回文串 II

lintcode練習-108. 分割回文串 II

108. 分割回文串 II

給定一個字串s,將s分割成一些子串,使每個子串都是迴文。

返回s符合要求的的最少分割次數。

樣例

比如,給出字串s = "aab"

返回 1, 因為進行一次分割可以將字串s分割成["aa","b"]這樣兩個迴文子串

解題思路:

class Solution:
    """
    @param s: A string
    @return: An integer
    """
    def minCut(self, s):
        # write your code here
        Palin = self.isPalindrom(s)
        dp = [float('inf')] * (len(s) + 1)
        dp[0] = 0
        for i in range(1, len(s)+1):
            for j in range(i):
                if Palin[j][i-1]:
                    dp[i] = min(dp[j] + 1, dp[i])
        
        return dp[len(s)] - 1
    
    
    def isPalindrom(self, s):
        n = len(s)
        dp = [[False] * n for _ in range(n)]
        for mid in range(n):
            i = j = mid
            while i >= 0 and j <= n-1 and s[i] == s[j]:
                dp[i][j] = True
                i -= 1
                j += 1
            
            i = mid
            j = mid + 1
            
            while i >= 0 and j <= n-1 and s[i] == s[j]:
                dp[i][j] = True
                i -= 1
                j += 1
        
        return dp