5. 最长回文子串 - LeetCode
5. 最长回文子串
动态规划
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
boolean[][] dp = new boolean[n + 1][n];
int left = 0, right = 1;
for(int i = 0; i < n; i++){
dp[0][i] = true;
dp[1][i] = true;
}
for(int i = 2; i <= n; i++){
for(int j = 0; j + i - 1 < n; j++){
if(s.charAt(j) == s.charAt(j + i - 1) && dp[i - 2][j + 1]){
dp[i][j] = true;
left = j;
right = j + i;
}
}
}
return s.substring(left, right);
}
}
dp[i][j]表示以j为起点长度为i的回文串是否存在。
时间复杂度O(n2),空间复杂度也为O(n2)。
如果用中间扩散的方法,可以降低空间复杂度,但时间复杂度没变。
用Manacher算法可以实现O(n)的时间复杂度,但是太过复杂没看懂,先埋个坑吧。

浙公网安备 33010602011771号