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

密码验证合格程序

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
//        1.长度超过8位
//        2.包括大小写字母.数字.其它符号,以上四种至少三种
//        3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
//        数据范围:输入的字符串长度满足 1≤n≤100
        Scanner scanner = new Scanner(System.in);
        //长度超过8位
        while (scanner.hasNextLine()) {
            String str = scanner.nextLine();
            if (str.length() >= 8 && str.length() <= 100) {
                //四种种情况至少出现3
//            if (bigChara>0&&)
                if (!subStringMoreThan2(str) && fourOrThree(str)) {
                    System.out.println("OK");
                } else {
                    System.out.println("NG");
                }
            }else {
                System.out.println("NG");
            }
        }
    }

//    有长度大于2的包含公共元素的子串重复
    public static boolean subStringMoreThan2(String str) {
        char[] chars = str.toCharArray();
        boolean flag = false;
        for (int i = 0; i < chars.length; i++) {
            for (int j = i + 1; j < chars.length; j++) {
                if (j + 2 < chars.length) {
                    if (chars[i] == chars[j] && chars[i + 1] == chars[j + 1]) {
                        if (chars[i + 2] == chars[j + 2]) {
                            flag = true;
                        }
                    }
                }
            }
        }
        return flag;
    }
    public static boolean fourOrThree(String str) {
        //包括大小写字母.数字.其它符号,以上四种至少三种
        int bigChara = 0;
        int smallChara = 0;
        int numChara = 0;
        int otherChara = 0;
        boolean flag = false;
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (65 <= chars[i] && chars[i] <= 90) {
                bigChara++;
            } else if (97 <= chars[i] && chars[i] <= 122) {
                smallChara++;
            } else if (48 <= chars[i] && chars[i] <= 57) {
                numChara++;
            } else if (123 <= chars[i] || chars[i] <= 47 || (58 <= chars[i] &&
                       chars[i] <= 64) || (91 <= chars[i] && chars[i] <= 96)) {
                otherChara++;
            }
        }
        if (bigChara > 0) {
            if (smallChara > 0) {
                if (numChara > 0 || otherChara > 0) {
                    flag = true;
                }
            } else if (numChara > 0) {
                if (smallChara > 0 || otherChara > 0) {
                    flag = true;
                }
            } else if (otherChara > 0) {
                if (smallChara > 0 || numChara > 0) {
                    flag = true;
                }
            }
        } else if (smallChara > 0) {
            if (bigChara > 0) {
                if (numChara > 0 || otherChara > 0) {
                    flag = true;
                }
            } else if (numChara > 0) {
                if (bigChara > 0 || otherChara > 0) {
                    flag = true;
                }
            } else if (otherChara > 0) {
                if (bigChara > 0 || numChara > 0) {
                    flag = true;
                }
            }

        } else if (numChara > 0) {
            if (bigChara > 0) {
                if (smallChara > 0 || otherChara > 0) {
                    flag = true;
                }
            } else if (smallChara > 0) {
                if (bigChara > 0 || otherChara > 0) {
                    flag = true;
                }
            } else if (otherChara > 0) {
                if (bigChara > 0 || smallChara > 0) {
                    flag = true;
                }
            }

        } else if (otherChara > 0) {
            if (bigChara > 0) {
                if (numChara > 0 || numChara > 0) {
                    flag = true;
                }
            } else if (numChara > 0) {
                if (bigChara > 0 || smallChara > 0) {
                    flag = true;
                }
            } else if (smallChara > 0) {
                if (bigChara > 0 || numChara > 0) {
                    flag = true;
                }
            }

        }
        return flag;
    }
}

情况较多 写的比较复杂 后续有待优化

全部评论

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务