题目难度Hard
给你一个字符串 s
,如果可以将它分割成三个 非空 回文子字符串,那么返回 true
,否则返回 false
。
当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。
示例 1:
输入:s = "abcbdd"
输出:true
解释:"abcbdd" = "a" + "bcb" + "dd",三个子字符串都是回文的。
示例 2:
输入:s = "bcbddxy"
输出:false
解释:s 没办法被分割成 3 个回文子字符串。
提示:
3 <= s.length <= 2000
s
只包含小写英文字母。
通过构建二维dp数组保存可以构成回文串的索引,dp[i][j] = 1说明s的i到j的字串为回文串,对任意位置都有dp[i][j] = dp[i + 1][j - 1],注意的是应从i = n - 1开始填充,保证利用先前结果。最后判断是否存在满足要求的三个即可。