//DP dp[l][r] = d[l + 1][r - 1] && s[l] == s[r]
//Time:O(N^2) Space:O(N^2)
public String longestPalindrome(String s) {
boolean dp[][] = new boolean[1010][1010];
int size = s.length(), start = 0, maxLen = 0;
for(int len = 1; len <= size; len++) {
for(int i = 0; i + len - 1 < size; i++) {
int l = i, r = i + len -1;
if(len == 1) dp[l][r] = true;
else if(len == 2) dp[l][r] = s.charAt(l) == s.charAt(r);
else {
dp[l][r] = dp[l + 1][r - 1] && s.charAt(l) == s.charAt(r);
}
if(dp[l][r] && maxLen < r - l + 1) {
start = l;
maxLen = r - l + 1;
}
}
}
return s.substring(start, start + maxLen);
}
//Time:O(N^2)
public String longestPalindrome2(String s) {
String res = "";
int len = s.length();
char cs[] = s.toCharArray();
for(int i = 0; i < len; i++) {
//奇数
int l = i - 1, r = i + 1;
while(l >= 0 && r < len && cs[l] == cs[r]){--l; ++r;} //[l+1, r - 1]
if(res.length() < r - l - 1) res = s.substring(l + 1, r );
//偶数
l = i;
r = i + 1;
while(l >= 0 && r < len && cs[l] == cs[r]){--l; ++r;} //[l+1, r - 1]
if(res.length() < r - l - 1) res = s.substring(l + 1, r ); //substring(i, j) 截取[i, j)即截取[i, j - 1]
}
return res;
}
08-14
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交