题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
题解:
1、先判断输入的字符串s1长度是否大于8;
2、在满足要求1的基础上判断s1是否满足条件2;
3、循环s1,分别取出3个字符子串curr,后面的字符串组成子串otherString,判断otherString是否包含curr;
代码如下:
public class HJ20 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String s1 = scanner.next();
// 用于判断输入的长度是否满足
if(s1.length()>8){
// 此处用set添加不同类型的数据标识
Set<String> set = new HashSet<>();
for(int i=0;i<s1.length();i++){
int ascii = s1.charAt(i);
if(Character.isDigit(s1.charAt(i))){
set.add("shuzi");
}else if(Character.isLetter(s1.charAt(i)) && ascii>=65 && ascii<=90){
set.add("daxie");
}else if(Character.isLetter(s1.charAt(i)) && ascii>=97 && ascii<=122){
set.add("xiaoxie");
}else{
set.add("qita");
}
}
// 根据set的长度判断是否满足条件2
if(set.size()>=3){
boolean flag = true;
// 循环字符串,取出当前3个字符子串curr, 剩下的子串otherString,判断otherStrign是否包含curr子串
for(int j=0;j<s1.length()-3;j++){
String curr = s1.substring(j,j+3);
String otherString = s1.substring(j+3);
if(otherString.contains(curr)){
flag = false;
}
}
if(flag){
System.out.println("OK");
}else {
System.out.println("NG");
}
}else{
System.out.println("NG");
}
}else{
System.out.println("NG");
}
}
}
}