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

密码验证合格程序

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;
        }
}

全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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