题解 | #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

本题只要求判断有没有重复子串,而且是长度大于等于 3 的重复子串,那就只需要判断有没有存在长度等于 3 的重复子串即可,考虑到密码长度不长,用哈希表完全可以接受。

如果要自己实现判别是否存在重复子串的逻辑,判断最长重复子串的长度是否大于 3,难度一下子就上来了。但没必要。

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String pwd = in.next();
            boolean isNG = false;
            if(pwd.length() <= 8 || pwd.contains("\n") || pwd.contains(" "))
                isNG = true;
            else{
                int count = 0;
                if(pwd.matches(".*[a-z].*")) count++;
                if(pwd.matches(".*[A-Z].*")) count++;
                if(pwd.matches(".*[0-9].*")) count++;
                if(pwd.matches(".*[^(a-zA-Z0-9)].*")) count++;
                if(count < 3)
                    isNG = true;
                else {
                    // 直接判断长度为 3 的子串有没有重复就行
                    Set<String> set = new HashSet<>();
                    for(int i = 0; i < pwd.length()-3; i++) {
                        String sub = pwd.substring(i, i+3);
                        if(set.contains(sub)) {
                            isNG = true;
                            break;
                        }
                        set.add(sub);
                    }
                }
            }

            System.out.println(isNG ? "NG" : "OK");
        }
    }
}
全部评论

相关推荐

船长想实习:我啥技术不会决定去试试,然后进去也不干活就搅局可以吗?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务