题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/questionTerminal/12e081cd10ee4794a2bd70c7d68f5507
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String line = in.nextLine();
int max = 0;
for (int i = 0; i < line.length() - 1; i++) {
// 遍历元素作为中心元素
// 中心元素只有一个
int result = find(line, i, i - 1, i + 1) - 1;
// 中心元素有两个,将右边的元素作为基准
if (line.substring(i, i + 1).equals(line.substring(i + 1, i + 2))) {
int result2 = find(line, i + 1, i - 1, i + 2);
if (result2 > result) {
result = result2;
}
}
if (result > max) {
max = result;
}
}
if (max > 1) {
System.out.println(max);
}
}
}
// 定位中心元素后,向左右两边查找判断
public static int find(String str, int n, int leftIndex, int rightIndex) {
for (int i = 0; leftIndex >= 0 && rightIndex <= str.length() - 1; i++) {
String left = str.substring(leftIndex, leftIndex + 1);
String right = str.substring(rightIndex, rightIndex + 1);
if (!left.equals(right)) {
break;
}
leftIndex--;
rightIndex++;
}
if (rightIndex - n > 0) {
// 右边界到中心元素的长度 * 2 即为最大回文长度
return 2 * (rightIndex - n);
}
return 0;
}
}