题解 | #密码截取#

密码截取

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

方法比较笨,耗时680ms, 思路:len从最大长度开始逐渐减一,截取所有长度等于len的子串,判断是否是回文串,如果是直接退出循环,输出len 判断回文串的方法如果直接用StringBuilder.reverse()方***超时,所以用了双指针的方法,把最前面的和最后面的字符进行逐个对比看是否相等,i >= j时退出

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.next();
            int len = str.length();
            for (int i = 0, j = 0; i < str.length(); j++) {
                if (j + len <= str.length() && len >= 1) {
                    String s = str.substring(j, j + len);
                    if (s.charAt(0) == s.charAt(s.length() - 1) && test(s)) {
                        break;
                    }
                } else {
                    len--;
                    i++;
                    j = -1;
                }
            }
            System.out.println(len);
        }
    }

    //判断是否是回文串
    public static boolean test(String str) {
        if(str.length()==1){
            return true;
        }
        boolean b = true;
        for (int i = 0, j = str.length() - 1; i < str.length(); i++, j--) {
            char c1 = str.charAt(i);
            char c2 = str.charAt(j);
            if (i >= j) {
                break;
            }
            if (c1 != c2) {
                b = false;
                break;
            }
        }
        return b;
        //return str.equals(new StringBuilder(str).reverse().toString());
    }
}
全部评论

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
我是小红是我:学校换成中南
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务