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);
}
}