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
数组,统计回文子串划分的方法数。
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论