【问题描述】
开发一个密码检查软件,密码要求:
-
长度超过8位
-
包括大小写字母.数字.其它符号,以上四种至少三种
-
不能有相同长度大于或等于2的子串重复
【输入形式】
一组或多组长度超过2的子符串。每组占一行
【输出形式】
如果符合要求输出:OK,否则输出NG
【样例输入】
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
【样例输出】
OK
NG
NG
OK
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
String str = s.next();
if (str.length() < 8) {
System.out.println("NG");
continue;
}
char[] chars = str.toCharArray();
int a=0,b = 0,c=0,d=0;
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(chars[i])) a=1;
else if (Character.isUpperCase(chars[i])) b=1;
else if (Character.isLowerCase(chars[i])) c=1;
else d=1;
}
if (a+b+c+d<3) {
System.out.println("NG") ;
continue;
}
boolean flag=true;
for (int i = 0; i <= str.length()-2; i++) {
for (int j = i + 2; j <= str.length(); j++) {
String substring = str.substring(i, j);
// System.out.println(substring+" "+str.indexOf(substring));
if (str.indexOf(substring)!=i&&(j-str.indexOf(substring))>=(substring.length()*2)) {
flag=false;
}
}
}
if(flag){
System.out.println("OK");
}else{
System.out.println("NG");
}
}
}
}