这是第三道编程题,300分;
输入为一串由空格隔开的字符串,空格数量不定,输出长度最长的回文字符串,如果最长回文字符串有多个,则多个一起输出,之间用一个空格隔开。
实现思路
先找出回文字符串,再找出回文字符串中长度最长是多少(假设为max),最后输出长度为max的回文字符串。
本程序中先新建一个boolean数组和int数组,初始值为false,0.分别存放是否为回文字符串标志和回文字符串长度。
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
while(in.hasNext()){
String string=in.nextLine().trim(); //trim()去掉两头的空格。
/*使用分割函数,分割条件是一个或多个空格,“\\s+”为一个或多个空格的正则表达式。*/
String[] strs=string.split("\\s+");
int[] num=new int[strs.length]; //存放回文字符串长度
boolean[] index=new boolean[strs.length]; //存放是否为回文字符串标志。
for (int i = 0; i < num.length; i++) {
num[i]=0;
index[i]=false;
}
/*下面for循环判断回文字符串*/
for (int i = 0; i < strs.length; i++) {
StringBuilder b=new StringBuilder(strs[i]);
if (b.reverse().toString().equals(strs[i])) {
index[i]=true;
num[i]=strs[i].length();
}
}
int max=0;
/*下面for找出最长回文字符串长度*/
for (int i = 0; i < index.length; i++) {
if (index[i]==true) {
if(num[i]>max)max=num[i];
}
}
StringBuilder b=new StringBuilder("");
/*输出长度为max的回文字符串*/
for (int i = 0; i < num.length; i++) {
if (index[i]==true) {
if (num[i]==max) {
b.append(strs[i]+" ");
}
}
}
/*判断一下,有可能没有回文字符串*/
if (b.length()>0) {
b.deleteCharAt(b.length()-1); //删除最后一个空格
}
System.out.println(b.toString());
}
}
}
结果