题目:
根据给定字符串是,找到最长的回文子串。
示例1:
输入:“babad”
输出:“bab,”aba"
示例2:
输入:“cbbd”
输出:“bb”
具体实现过程如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String s = sc.nextLine();
// 判断字符串本身是否是回文串
List<String> list = new ArrayList<>(); // 存放所有的回文串
for (int i = 1; i < s.length(); i++) { // 控制开始查找的位置
int left = 0,right = 0; // 分别表示向左和向右查询
if(s.charAt(i-1) == s.charAt(i)){ //出现长度为偶数的回文串
left = i-1;
right = i;
}else{
left = i-1;
right = i+1;
}
while (left >=0 && right <= s.length()-1){
char cl = s.charAt(left);
char cr = s.charAt(right);
if(cl != cr){ // 如果两边的字符不相等,则结束while循环
break;
}else{ //否则记录下回文串
String r = s.substring(left,right+1);
list.add(r);
}
// 将索引分别向两边扩散
left--;
right++;
}
}
// 调用方法查询满足条件的回文串
System.out.println("最长回文串是:");
List<String> maxStr = maxStr(list);
for (String s1 : maxStr) {
System.out.println(s1);
}
}
/**
* 找最大的回文串,如果有多个最大长度的字符串则一并输出
* @param list
* @return
*/
public static List<String> maxStr(List<String> list){
List<String> resultList = new ArrayList<>();
int length = 0;
// 第一次遍历找出最长回文串的长度
for (int i = 0; i < list.size(); i++) {
if(list.get(i).length() > length){
length = list.get(i).length();
}
}
// 第二次查找满足长度的回文串
for (String s : list) {
if(s.length() == length){
resultList.add(s);
}
}
return resultList;
}
}
测试结果:
第一种:
请输入字符串:
jklkjabsbakj
最长回文串是:
jklkj
absba
第二种:
请输入字符串:
jklkjabccba
最长回文串是:
abccba
第三种:
请输入字符串:
abba
最长回文串是:
abba