题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
import java.util.Scanner;
//没有用到正则,算是暴力解题
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNextLine()){
String str=sc.nextLine().trim();
int flag=1;//没有重复子字符串的标志位
char[] ch=str.toCharArray();
int[] flag1={0,0,0,1};//各类字符的标志位
int flag2=0;//累加器
//长度大于8
if (str.length()<8){
System.out.println("NG");
}
//长度大于2的子字符串不会出现两次
//方法是判断子串不被剩下两个子串包含,用contains来判断
if (str.length()>=8){
for (int i = 0; i <str.length()-2 ; i++) {
for (int j = i + 3; j < str.length(); j++) {
if (str.substring(0, i).contains(str.substring(i, j)) || str.substring(j).contains(str.substring(i, j))) {
flag = 0;
continue;
}
}
}
if (flag==0){
System.out.println("NG");
}
//校验字符种类大于3种,利用设置的字符种类的标志位
if (flag==1){
for (char ch1:ch
) {
if (Character.isDigit(ch1)){
flag1[0]=1;
flag2 ++;
}
if (Character.isLowerCase(ch1)){
flag1[1]=1;
flag2 ++;
}
if (Character.isUpperCase(ch1)){
flag1[2]=1;
flag2 ++;
}
if (flag2==str.length()){
flag1[3]=0;//表示没有其他特殊字符
}
}
if ((flag1[0]+flag1[1]+flag1[2]+flag1[3])>2){
System.out.println("OK");
}else {
System.out.println("NG");
}
}
}
}
}
}
#算暴力解法吗#
