for i inrange(n-1,-1,-1): for j inrange(i+1, n): dp[i][j] = (s[i] == s[j]) & dp[i+1][j-1]
# start[] 表示以第一个字符开头,数组的值为回文字符串结尾的下标 start = [] # end[] 表示以最后一个字符结尾,数组的值为回文字符串开头的下标 end = [] for i inrange(1,n-1): t = s[:i] if t == t[::-1]: start.append(i-1)
for i inrange(n-1,1,-1): t = s[i:] if t == t[::-1]: end.append(i)
# 注意 start 和 end都为有序,start从小到大,end从大到小 for part1 in start: for part2 in end: # 如果中间没有字符串了,则直接跳出循环 if part1 + 1 >= part2: break # 查看中间的字符串是否回文,如果回文,则说明可以分割为3个非空回文子字符串 if dp[part1+1][part2-1]: returnTrue