LeetCode 132. 分割回文串 II

2022-08-20  本文已影响0人  草莓桃子酪酪
题目

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的最少分割次数 。

例:
输入:s = "aab"
输出:1
解释:只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。

方法:动态规划
class Solution(object):
    def minCut(self, s):
        isPalindromic = [[False] * len(s) for row in range(len(s))]
        for i in range(len(s)-1, -1, -1):
            for j in range(i, len(s)):
                if s[i] == s[j]:
                    if j-i <= 1 or isPalindromic[i+1][j-1]:
                        isPalindromic[i][j] = True

        dp = [float('INF')] * len(s)
        dp[0] = 0
        for i in range(1, len(s)):
            if isPalindromic[0][i]:
                dp[i] = 0
                continue
            for j in range(i):
                if isPalindromic[j+1][i]:
                    dp[i] = min(dp[i], dp[j] + 1)
        return dp[-1]
参考

代码相关:https://programmercarl.com/0132.%E5%88%86%E5%89%B2%E5%9B%9E%E6%96%87%E4%B8%B2II.html

上一篇 下一篇

猜你喜欢

热点阅读