描述
密码要求:1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的不含公共元素的子串重复 (注:其他符号不含空格或换行)
数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100
输入描述: 一组字符串。输出描述: 如果符合要求输出:OK,否则输出NG
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String pwd = sc.nextLine();
// 长度不小于8 check相同长度超过2的字串重复
if(pwd.length() <= 8){
System.out.println("NG");
continue;
}
// 校验字符串中是否有长度大于2的重复子串
if (hasRepeatSubstring(pwd, 0, 3)){
System.out.println("NG");
continue;
}
int count = 0;
// 包括大小写字母.数字.其它符号,以上四种至少三种
if(pwd.matches(".*\\d+.*")) count++;
if(pwd.matches(".*[a-z]+.*")) count++;
if(pwd.matches(".*[A-Z]+.*")) count++;
if(pwd.matches(".*[^A-Za-z0-9]+.*")) count++;
if(count < 3){
System.out.println("NG");
continue;
}
System.out.println("OK");
}
sc.close();
}
private static boolean hasRepeatSubstring(String pwd, int start, int end) {
if (pwd.length() <= end)
return false;
if (pwd.substring(end).contains(pwd.substring(start, end)))
return true;
return hasRepeatSubstring(pwd, start + 1, end + 1);
}
}