题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度大于2的子串重复
输入描述
一组或多组长度超过2的字符串。每组占一行
输出描述
如果符合要求输出:OK,否则输出NG
示例
输入:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出:
OK
NG
NG
OK
代码
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
boolean flag = true;
String str = sc.nextLine();
char[] ch = str.toCharArray(); //转字符数组
if(ch.length<=8)flag=false; //要求1
//&Z@#+dN0&Z
int[] symbol = new int[]{0,0,0,0}; //定义容量为4的整型数组,分别对应小写,大写,数字,其它符号
for(int i=0; i<ch.length; i++){ //循环,找出每个字符所属种类
if(ch[i]>='A' && ch[i]<='Z')symbol[0]++;
else if(ch[i]>='a' && ch[i]<='z')symbol[1]++;
else if(ch[i]>='0' && ch[i]<='9')symbol[2]++;
else symbol[3]++;
}
int count =0; //统计字符种类
for(int i=0; i<symbol.length; i++){
if(symbol[i] > 0)count++;
}
if(count < 3)flag = false; //要求2
for(int i=0; i<str.length()-3; i++){
String str1 = str.substring(i,i+3);
String str2 = str.substring(i+3);
if(str2.contains(str1)){
flag = false; //要求3
}
}
if(flag == true)System.out.println("OK");
else System.out.println("NG");
}
}
}