题解 | #密码验证合格程序#
密码验证合格程序
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); } } }