java代码:
public class date_7_2_回文字符串算法 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("pls enter the String: ");
String str1 = input.nextLine();
String result = str1.substring(0, 1); // 防止出现字符串只有一个元素的情况
for (int i = 0; i < str1.length(); i++) {
result = extend_from_center(str1, i, i, result);
result = extend_from_center(str1, i, i+1, result);
}
System.out.println(result);
}
public static String extend_from_center(String str, Integer left_index, Integer right_index, String result) {
while (left_index >= 0 && right_index < str.length() && str.charAt(left_index) == str.charAt(right_index)) {
left_index--;
right_index++;
}
if (right_index - left_index - 1 > result.length()) {
result = str.substring(left_index+1, right_index);
}
return result;
}
}
详解例子:
假如给的string是“abba”(接下来我就尽量用下标位置说明,以免混淆)
首先初始化 result = s.substring(0,1)这里是拿到下标0的数据也就是a
for loop对字符串的长度遍历每次拿到index(0,1,2,3)
第一次loop:
本次loop第一次entendFromCenter传入(abba,0,0)进行while判断,首先left大于0,right小于abba的长度,str【0】 等于str【0】,进入while,left –,right ++,再次进行while判断,left小于0,终止
此时left是-1,right是1,进行if判断,right-left-1 = 1,不大于result 的长度,结束
本次loop第二次entendFromCenter传入(abba,0,1)进行while判断,首先left大于0,right小于abba的长度,str【0】不等于str【1】,此时left是0,right是1,进行if判断,right-left-1 = 0,不大于result 的长度,结束
第二次loop:
本次loop第一次entendFromCenter传入(abba,1,1)进行while判断,首先left大于0,right小于abba的长度,str【1】 等于str【1】,进入while,left –,right ++,再次进行while判断,str【0】不等于str【2】,终止
此时left是0,right是2,进行if判断,right-left-1 = 1,不大于result 的长度,结束
本次loop第二次entendFromCenter传入(abba,1,2)进行while判断,首先left大于0,right小于abba的长度,str【1】等于str【2】,进入while,left –,right ++,再次进行while判断,str【0】等于str【3】,进入while,left –,right ++,再次进行while判断,left小于0,结束。
此时left是-1,right是4,进行if判断,right-left-1 = 4,大于result 的长度,将result 替换为str.substring(0, 3), 也就是result =“abba”,结束
第三次loop,第四次loop……
后面就差不多了,不多赘述