题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
使用contains来灵活判断是否有重复子串
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Pattern;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Main hj = new Main();
List<String> ress = new ArrayList<>();
while (in.hasNextLine()) {
String input = in.nextLine();
String res = hj.verifyStr(input) ? "OK" : "NG";
ress.add(res);
}
for (String r : ress) {
System.out.println(r);
}
}
/**
* 单行校验
*/
public boolean verifyStr(String str) {
boolean pass1 = false;
boolean pass2 = false;
int length = str.length();
if (length > 8) {
pass1 = true;
} else {
return pass1;
}
int count = 0;
Pattern p1 = Pattern.compile("[a-z]");
Pattern p2 = Pattern.compile("[A-Z]");
Pattern p3 = Pattern.compile("[0-9]");
Pattern p4 = Pattern.compile("[^a-zA-Z0-9]");
if (p1.matcher(str).find())
count++;
if (p2.matcher(str).find())
count++;
if (p3.matcher(str).find())
count++;
if (p4.matcher(str).find())
count++;
if (count >= 3) {
pass2 = true;
} else {
return pass2;
}
boolean pass3 = duplicatedStr(str);
return pass1 && pass2 && pass3;
}
/**
* 重复子串校验
*/
public boolean duplicatedStr(String str) {
String subStr1 = "";
String subStr2 = "";
for (int i = 3; i < str.length(); i++) {
subStr1 = str.substring(i);
subStr2 = str.substring(i - 3, i);
if (subStr1.contains(subStr2)) {
return false;
}
}
return true;
}
}
