题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
//看了几个高赞回答,感觉他们在校验不含重复子串部分的代码不正确,都是校验长度为3的字串 //题目是大于2,所以应该包含3,4,5.... //在校验包含三种以上类型字符部分代码没其他人的简洁。。 import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String str = in.nextLine(); if (len_big_8(str) && kinds_big_3(str) && not_repeat(str)) { System.out.println("OK"); } else { System.out.println("NG"); } } } //校验长度大于8 public static boolean len_big_8(String str) { boolean res = str.length() > 8 ? true : false; return res; } //校验包含大小写字母.数字.其它符号,以上四种至少三种 public static boolean kinds_big_3(String str) { int count = 0; int isisDigit = 0; int isUpperCase = 0; int isLowerCase = 0; int isNotLetterOrDigit = 0; for (Character c : str.toCharArray()) { if (Character.isDigit(c)) { isisDigit = 1; if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) { return true; } continue; } if (Character.isUpperCase(c)) { isUpperCase = 1; if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) { return true; } continue; } if (Character.isLowerCase(c)) { isLowerCase = 1; if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) { return true; } continue; } if (!Character.isLetterOrDigit(c)) { isNotLetterOrDigit =1; if (isisDigit + isUpperCase + isLowerCase + isNotLetterOrDigit >= 3) { if (count >= 3) { return true; } continue; } } } return false; } //校验不含重复子串 public static boolean not_repeat (String str){ int len = str.length() / 2; for (int l = 3; l <= len; l++) { for (int i = 0; i + l < str.length(); i++) { if (str.substring(i + l).contains(str.substring(i, i + l))) { return false; } } } return true; } }