最长子回文算法简化至28行
问题:将一串字符中的最长子回文找出,请编写程序实现
源代码:
public class TheLongestPalindrome {
public static void main(String args[]) {
System.out.println(compute("abcdnmpoiopnjklba"));
}
static String compute(String s) {
int len = s.length();
if (len <= 0 )
return "";
int start = 0, end = 1;
int arr[][] = new int[len][len];
for (int i = 0; i < len; i++) {
arr[i][i] = 1;
if (i < len - 1 && s.charAt(i) == s.charAt(i + 1)) {
arr[i][i + 1] = 1;
start = i;
end = 2;
}
}
for (int k = 3; k <= len; k++)
for (int i = 0, j = k + i - 1; k + i - 1 < len; i++, j = k + i - 1)
if (s.charAt(i) == s.charAt(j) && arr[i + 1][j - 1] == 1) {
arr[i][j] = 1;
start = i;
end = k;
}
return s.substring(start, start + end);
}
}
运行结果: