题解 | #密码验证合格程序#
密码验证合格程序
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;
}
}
查看25道真题和解析