给你一个字符串s = "babad",找到 s 中最长的回文子串。java解决
时间: 2024-09-20 12:04:30 浏览: 39
在Java中,可以使用动态规划(Dynamic Programming)的方法来解决这个问题。下面是一个简单的算法步骤:
1. 定义一个布尔数组`dp`,长度为`s`的长度,`dp[i][j]`表示`s`从位置`i`到`j`是否构成回文串。
2. 初始化两个变量`start`和`maxLen`,分别记录当前发现的最长回文子串的起始位置和长度,初始值都是0。
3. 遍历字符串`s`,对于每个字符`c`,检查其左右两边的字符是否相等,并更新`dp`数组。如果`c`等于`c[::-1]`(即反向的`c`),则`dp[i][j] = true`;否则,设置`dp[i][j] = false`。
4. 当`dp[i][j] == true`时,计算`j - i + 1`是否大于`maxLen`,如果是,则更新`start`和`maxLen`。
5. 最终的最长回文子串就是`s.substring(start, start + maxLen)`。
以下是对应的Java代码示例:
```java
public class Solution {
public String longestPalindrome(String s) {
int n = s.length();
boolean[][] dp = new boolean[n][n];
int start = 0, maxLen = 1;
for (int len = 1; len <= n; ++len) {
for (int i = 0; i < n - len + 1; ++i) {
int j = i + len - 1;
if (len == 1 || (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1])) {
dp[i][j] = true;
if (len > maxLen) {
start = i;
maxLen = len;
}
}
}
}
return s.substring(start, start + maxLen);
}
}
```
阅读全文