华为2017年大牛机试题—最长回文字符串

这是第三道编程题,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());  
        }  
     }
 }

结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值