Given a string s, find the longest palindromic substring in s. You may
assume that the maximum length of s is 1000.Example 1:
Input: “babad” Output: “bab” Note: “aba” is also a valid answer.
Example 2:Input: “cbbd” Output: “bb”
求给定字符串s的最长回文子串
- 暴力破解
在第i个字符串时,比较i-k与i+k是否相等
- dp
dp[i][j] 为字符串的第i到第j个字符串是否为回文字符串
- 递推公式:dp[i][j] = (s.charAt(i) == s.charAt(j) && (dp[i+1][j - 1] || j-i<=2))
dp数组的初始化为dp[i][i] =1
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
if(n < 2) {
return s;
}
// 定义一个数组dp[n][n],dp[i][j]标识索引i和j之间是否是回文子序列
//递推公式:dp[i][j] = if((s.charAt(i) == s.charAt(j)) && (dp[i+1][j-1] || i-j <=2 ))
boolean[][] dp = new boolean[n][n];
for(int i = 0; i< n ; i++) {
dp[i][i] = true;
}
int l = 0;
int r = 0;
int len = 1;
for(int j = 1; j < n; j++) {
for(int i = 0; i< j ; i++) {
if(s.charAt(i) == s.charAt(j) &&(dp[i + 1][j - 1] || j - i <= 2)) {
dp[i][j] = true;
int len1 = j - i + 1;
if(len1 > len) {
l = i;
r = j;
len = len1;
}
} else {
dp[i][j] = false;
}
}
}
return s.substring(l, r + 1);
}
}