lintcode练习-108. 分割回文串 II

版权声明:原创部分都是自己总结的,如果转载请指明出处。觉得有帮助的老铁,请双击666! https://blog.csdn.net/qq_36387683/article/details/81909213

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
            

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81909213