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

密码验证合格程序

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

import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            // int a = in.nextInt();
            // int b = in.nextInt();
            // System.out.println(a + b);
            String line = in.nextLine();
            if (line.length() <= 8 || line.contains(" ") || line.contains("\n")) {
                System.out.println("NG");
                return;
            }
            String result = "OK";
            char[] chars = line.toCharArray();

            int number = 0;
            int lower = 0;
            int upper = 0;
            int other = 0;
            int triple = 0;
            for (int i = 0; i < chars.length; i++) {
                if (chars[i] >= '0' && chars[i] <= '9') {
                    if(number == 0) number++;
                } else if (chars[i] >= 'a' && chars[i] <= 'z') {
                    if(lower == 0) lower++;
                } else if (chars[i] >= 'A' && chars[i] <= 'Z') {
                    if(upper == 0) upper++;
                } else if (other == 0) {
                    other++;
                }
            }


            int n = line.length();

            // 遍历可能的子串长度,子串长度从 3 开始, 因为是重复子串,半拉就够啦
            for (int len = 3; len <= n / 2; len++) {
                Set<String> seen = new HashSet<>();
                // 使用滑动窗口检查长度为 len 的所有子串
                for (int i = 0; i <= n - len; i++) {
                    String substring = line.substring(i, i + len);
                    // 如果子串已存在,则表示存在重复子串
                    if (seen.contains(substring)) {
                        result = "NG";  // 存在重复子串,返回 NG
                    }
                    seen.add(substring);
                }
            }
            // System.out.println("number = "+number +"lower = " + lower + "upper = " + upper + " other = " + other);
            if (number + lower + upper + other < 3) {
                result = "NG";
            }
            System.out.println(result);
        }
    }
}

全部评论

相关推荐

感觉今年拿到大厂实习offer的人很多,光是身边同学室友都是好几个offer。由此可见,秋招得有多卷
小浪_Coding:必须卷的起飞, 应该比25更卷一点, 25已经是哀声一片了, 26会更难一点, 现在还有`很多25未找到的
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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