牛客:HJ20 密码验证合格程序 题解

该博客主要介绍了如何解决牛客网HJ20密码验证问题。密码需满足长度超过8位,包含大小写字母、数字及其它符号中的至少三种,并且不允许存在长度大于2的重复子串。博主提供了满足这些条件的判断逻辑和代码实现。
摘要由CSDN通过智能技术生成

题目描述
密码要求:
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");
            }
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值