1. 程式人生 > >python leetcode 132. Palindrome Partitioning II

python leetcode 132. Palindrome Partitioning II

思路:如果s[left:right]是迴文並且s[:left]也是迴文,那麼s[:right]即是一個分割。同理如果dp[left:right]是最小回文分割並且dp[:left]也是最小回文分割,那麼dp[:right]=dp[left:right]+dp[:left]。為了方便遍歷,這裡將dp[left:right]設定為1即s[left:right]是迴文。為了減少執行時間,增加一個判斷s[left:right]是否是迴文序列的二維陣列。

class Solution(object):
    def minCut(self, s):
        """
        :type s: str
        :rtype: int
        """
#p[j][i] 判斷j-i是否是迴文序列 dp[i]0~i的最少分割 ls=len(s) dp=[0]*(ls+1) dp[0]=-1 p=[[False]*ls for i in range(ls)] for i in range(ls): dp[i+1]=i for i in range(ls): for j in range(i+1): if s[j]==s[i] and ((i-j<2) or
p[j+1][i-1]): p[j][i]=True dp[i+1]=min(1+dp[j],dp[i+1]) return dp[ls]