给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: “aab”
输出: 1
解释: 进行一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。
思路
动态规划
简历数组dp
dp[i]表示前i个字母的最少分割次数,默认为i-1。
当s[a:b]==s[a:b][::-1]时,dp[b]=dp[a]+1
回文有两种情况字符数为奇数或偶数个,如‘aba’和‘bb’
代码
def minCut(self, s):
if s == s[::-1]: return 0
for i in range(1,len(s)):
if s[i:] == s[:i-1:-1] and s[:i] == s[i-1::-1]: return 1
dp = []
for i in range(-1,len(s)):
dp.append(i)
for i in range(len(s)):
t=0
while i-t >=0 and i+t=0 and i+t+1