题解 | #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

//看了几个高赞回答,感觉他们在校验不含重复子串部分的代码不正确,都是校验长度为3的字串
//题目是大于2,所以应该包含3,4,5....
//在校验包含三种以上类型字符部分代码没其他人的简洁。。

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String str = in.nextLine();
            if (len_big_8(str) && kinds_big_3(str) && not_repeat(str)) {
                System.out.println("OK");
            } else {
                System.out.println("NG");
            }
        }
    }
    //校验长度大于8
    public static boolean len_big_8(String str) {
        boolean res = str.length() > 8 ? true : false;
        return res;
    }
    //校验包含大小写字母.数字.其它符号,以上四种至少三种
    public static boolean kinds_big_3(String str) {
        int count = 0;
        int isisDigit = 0;
        int isUpperCase = 0;
        int isLowerCase = 0;
        int isNotLetterOrDigit = 0;
        for (Character c : str.toCharArray()) {
            if (Character.isDigit(c)) {
                isisDigit = 1;
                if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) {
                    return true;
                }
                continue;
            }
            if (Character.isUpperCase(c)) {
                isUpperCase = 1;
                if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) {
                    return true;
                }
                continue;
            }
            if (Character.isLowerCase(c)) {
                isLowerCase = 1;
                if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) {
                    return true;
                }
                continue;
            }
            if (!Character.isLetterOrDigit(c)) {
                isNotLetterOrDigit =1;
                if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) {
                    if (count >= 3) {
                        return true;
                    }
                    continue;
                }
            }

        }
        return false;
    }
        //校验不含重复子串
    public static boolean not_repeat (String str){
            int len = str.length() / 2;
            for (int l = 3; l <= len; l++) {
                for (int i = 0; i + l < str.length(); i++) {
                    if (str.substring(i + l).contains(str.substring(i, i + l))) {
                        return false;
                    }
                }
            }
            return true;
        }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务