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

深信服公司福利 900人发布