给出一个字符串,求出他的最长回文串。
已知的解法有三种,动态规划,中心扩散,manacher。这里准备使用前两种算法,另外一种暂时没时间研究。
解法1:
动态规划
对于回文串,单独的一个字符是回文串,两个相邻的字符相等时是回文串。
public String longestPalindrome(String s) {
int ans = 0;
String str = s.substring(1);
// 回文串,对于字符串S,如果串p(i,j)是回文串,那么p(i+1,j-1)也是回文串
int n = s.length();
boolean dp[][] = new boolean[n][n];
for (int i = 0; i < n ; i ++) {
for (int j = 0; j + i < n; j++) {
if (i == 0) {
dp[j][j+i] = true;
}
else if (i == 1) {
dp[j][j+i] = (s.charAt(j) == s.charAt(j+i));
}
else {
dp[j][i+j] = (s.charAt(j) == s.charAt(i+j) && dp[j+1][i+j-1]);
}
if (dp[j][i+j] && (i+1 > ans)) {
str=s.substring(j,i+j+1);
}
}
}
return str;
}
剩下的明天补上。。。