Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
For example, given s ="aab",
Return1since the palindrome partitioning["aa","b"]could be produced using 1 cut.
def minCut(S): dp = [len(S) for _ in S] print dp index = 0 while index < len(S): if isPalindrome(S[:index + 1]): dp[index] = 0 j = 1 while j <= index: if isPalindrome(S[j:index + 1]): dp[index] = min(dp[index], dp[j - 1] + 1) else: dp[index] = min(dp[index], dp[j - 1] + index - j + 1) j += 1 index += 1 return dp[len(S) - 1] def isPalindrome(s): i = 0 j = len(s) - 1 while i < j: if s[i] == s[j]: i += 1 j -= 1 else: return False return True print minCut("abaccddgerg")