Given a string S
, find the longest palindromic substring in S
. You may assume that the maximum length of S
is 1000, and there exists one unique longest palindromic substring.
Example
Given the string = "abcdzdcab"
, return "cdzdc"
.
第一种算法:针对每个字符,向左右拓展,知道不是回文字符串位置。O(N*N)
第二种算法:将字符串reverse,求最长公共子串。 O(N)
第三种算法:二维动态规划。O(N*N)
这里展示第三种算法:
public class Solution {
/**
* @param s input string
* @return the longest palindromic substring
*/
public String longestPalindrome(String s) {
if(s.length() == 0) return "";
boolean[][] res = new boolean[s.length()][s.length()];
String resp = "";
int max = 0;
for(int i = s.length() - 1; i >= 0; i--) {
for(int j = i; j < s.length(); j++) {
if(s.charAt(i) == s.charAt(j) && (j - i <= 2 || res[i + 1][j - 1])) {
res[i][j] = true;
if(max < j - i + 1) {
max = j - i + 1;
resp = s.substring(i,j+1);
}
}
}
}
return resp;
}
}