用Java求一个字符串中的最长回文
时间: 2024-11-25 20:16:00 浏览: 20
在Java中,我们可以使用动态规划的方法来寻找一个字符串中的最长回文子串。回文是一个正读和反读都一样的字符序列,例如"madam"、"racecar"等。下面是一个简单的步骤:
1. 首先,创建一个长度与输入字符串相同的布尔数组`dp`,其中`dp[i][j]`表示从索引`i`到`j`的子串是否为回文。
2. 初始化边界条件:如果两个索引相等,则该子串只包含一个字符,自然是回文;如果只有一个字符则是回文;对于其他情况,如果第一个字符与最后一个字符不相等,则不是回文。
3. 使用两层循环遍历数组,检查每个子串的首尾字符是否相等,如果相等则继续检查中间部分(即去掉首尾字符后的子串),如果这个中间部分也是回文,则当前子串就是回文。
4. 在遍历过程中,记录下最长回文子串的起始位置和结束位置,最后可以根据这两个位置获取最长回文串。
下面是示例代码片段:
```java
public String longestPalindrome(String s) {
int n = s.length();
boolean dp[][] = new boolean[n][n];
int start = 0, maxLen = 1;
for (int i = 0; i < n; ++i) {
dp[i][i] = true;
}
// 检查长度为2的子串
for (int i = 0; i < n - 1; ++i) {
if (s.charAt(i) == s.charAt(i + 1)) {
dp[i][i + 1] = true;
start = i;
maxLen = 2;
}
}
// 检查长度大于2的子串
for (int k = 3; k <= n; ++k) {
for (int i = 0; i < n - k + 1; ++i) {
int j = i + k - 1;
if (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]) {
dp[i][j] = true;
if (k > maxLen) {
start = i;
maxLen = k;
}
}
}
}
return s.substring(start, start + maxLen);
}
```
阅读全文