题解 | #密码截取#

密码截取

http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

暴力求解,最开始想法是双层循环遍历所有子字符串,逐个判断是否回文,取最大值; 但题目只要最大回文长度就好,所以遍历可以设置检测长度从s.length()递减,不会遍历到较小字符串。

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s=sc.nextLine();
            int ans=0;
            //双层循环暴力求解
//             for(int i=0;i<s.length();i++){
//                 for(int j=s.length()-1;j>i;j--){
//                     if(ifback(s,i,j)){
//                         ans=Math.max(ans,j-i+1);
// //                         break;
//                     }
//                 }
//             }
            //按照长度递减寻找最长回文字符串
            for(int i=s.length();i>1;i--){
                for(int j=0;j+i-1<s.length();j++){
                    if(ifback(s,j,j+i-1)){
                        ans=Math.max(ans,i);
                        break;
                    }
                }
            }
            System.out.println(ans);
        }
    }
    //判断字符串st,en之间是否为回文字符串
    public static boolean ifback(String s,int st,int en){
        while(en>st){
            if(s.charAt(st)!=s.charAt(en)){
                return false;
            }
            else{
                en--;
                st++;
            }
        }
        return true;
        
    }
}
全部评论

相关推荐

明天不下雨了:这个项目 这个简历 这个模板 莫不是一个开源的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务