Leetcode5666、回文串分割 IV–动态规划
基本思路
这个是一个简单的使用两次动态规划的问题,第一次动态规划是判断任意一段区间的字符串是否为回文。第二次使用动态规划是判断是否能分成三个回文,其中该处的状态包括是否能分成一个回文,是否能分成两个回文,是否能分成三个回文。
代码
class Solution {
public boolean checkPartitioning(String s) {
int n=s.length();
char[] str=s.toCharArray();
//处理字符串区间
boolean[][] dp=new boolean[n][n];
for(int i=0;i<n;i++) {
Arrays.fill(dp[i], true);
}
for(int i=2;i<=n;i++) {
for(int j=0;j+i<=n;j++) {
dp[j][j+i-1]=(str[j]==str[j+i-1] && dp[j+1][j+i-2]);
}
}
boolean[][] res=new boolean [n][3];
res[0][0]=true;
res[0][1]=false;
res[0][2]=false;
for(int i=1;i<s.length();i++) {
res[i][0]=dp[0][i];
for(int j=i;j>0;j--) {
res[i][1]=dp[j][i] && res[j-1][0];
if(res[i][1]) break;
}
for(int j=i;j>1;j--) {
res[i][2]=dp[j][i] && res[j-1][1];
if(res[i][2]) break;
}
}
return res[n-1][2];
}
}