import java.util.Scanner; import java.util.ArrayList; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //获取所有的密码内容 List<String> passwordList = new ArrayList<>(); while (scanner.hasNextLine()) { String input = scanner.nextLine(); if (input.equals("")) { break; } passwordList.add(input); } //判断密码是否合格 for (int i = 0; i < passwordList.size(); i++) { if (isPasswordValid(passwordList.get(i))) { System.out.println("OK"); } else { System.out.println("NG"); }; } } public static boolean isPasswordValid(String password) { // 检查长度不超过8位 if (password == null || password.length() == 0 || password.length() < 8) { return false; } // 检查必须包含至少三种字符类型 if (!containsAtLeastThreeTypes(password)) { return false; } // 检查不能有长度大于2的重复子串(不重叠) if (hasRepeatedSubstring(password)) { return false; } return true; } private static boolean containsAtLeastThreeTypes(String password) { int typeCount = 0; // 检查大写字母 if (!password.equals(password.toLowerCase())) { typeCount++; } // 检查小写字母 if (!password.equals(password.toUpperCase())) { typeCount++; } // 检查数字 if (password.matches(".*\\d.*")) { typeCount++; } // 检查特殊字符(非字母数字) if (password.matches(".*[^a-zA-Z0-9].*")) { typeCount++; } return typeCount >= 3; } private static boolean hasRepeatedSubstring(String password) { // 检查所有可能长度大于2的子串 for (int len = 3; len <= password.length() / 2; len++) { for (int i = 0; i <= password.length() - len; i++) { String substring = password.substring(i, i + len); // 确保找到的重复子串不重叠 if (password.indexOf(substring, i + len) != -1) { return true; } } } return false; } }