Java实现基于动态规划的回文子串划分
在Java中,我们可以使用动态规划的方法来解决回文子串划分问题。以下是一个简单的实现:
public class PalindromePartitioning {
public static void main(String[] args) {
String s = "aab";
System.out.println(partition(s));
}
public static int partition(String s) {
int n = s.length();
boolean[][] dp = new boolean[n][n];
// 初始化长度为1和2的子串
for (int i = 0; i < n; i++) {
dp[i][i] = true;
if (i < n - 1 && s.charAt(i) == s.charAt(i + 1)) {
dp[i][i + 1] = true;
}
}
// 动态规划,从长度为3的子串开始
for (int len = 3; len <= n; len++) {
for (int i = 0; i <= n - len; i++) {
int j = i + len - 1;
if (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]) {
dp[i][j] = true;
}
}
}
// 计算回文子串划分的方法数
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (dp[i][j]) {
count++;
}
}
}
return count;
}
}
这个程序首先初始化了一个二维布尔数组dp
,用于存储子串是否为回文。然后,我们使用动态规划的方法,从长度为3的子串开始,逐步计算所有子串是否为回文。最后,我们遍历dp
数组,统计回文子串划分的方法数。
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论