题解 | #密码验证合格程序#
密码验证合格程序
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"); } } } } } }#算暴力解法吗#