题目一:最长回文子串
回文串是指正着读和反着读都一样的字符串。给定一个字符串,求出它的最长回文子串。
解决思路:
我们可以用动态规划来解决这个问题。我们先定义状态:dpi 表示从i到j是否为回文串。则有以下状态转移方程:
dp[i][j] = true (i == j) dp[i][j] = (s[i] == s[j]) (j = i + 1) dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1] (j > i + 1)
在这个状态转移方程中,如果 s[i] == s[j],那么 dpi 的值就取决于 dpi + 1 是否为 true。同时,如果 i 和 j 之间只有一个字符,那么它们必定是回文串。
最后,我们可以遍历 dp 数组,找出其中值为 true 的最长子串。
代码实现:
public String longestPalindrome(String s) {
int n = s.length();
boolean[][] dp = new boolean[n][n];
String res = "";
for (int i = n - 1; i >= 0; i--) {
for (int j = i; j < n; j++) {
dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 2 || dp[i + 1][j - 1]);
if (dp[i][j] && j - i + 1 > res.length()) {
res = s

本文介绍了几种常见的算法问题及其解决方案,包括使用动态规划求解最长回文子串,利用哈希表寻找两数之和,迭代法反转链表,递归计算二叉树最大深度,以及字符串转整数的处理策略。这些算法在面试和编程实践中具有重要意义。
最低0.47元/天 解锁文章
2882

被折叠的 条评论
为什么被折叠?



