lintcode練習-108. 分割回文串 II
阿新 • • 發佈:2019-01-27
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