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

密码验证合格程序

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

模拟

思路

  1. 长度小于8,则 NG
  2. 使用 set 判断密码中字符类型是否超过三种
    • 00 代表“数字”、11 代表“大写字母”、22 代表“小写字母”、33 代表“其他字符”
    • 若最终输入串 line 对应的 set 长度小于 3,则说明密码中字符类型没有超过三种,即 NG
  3. 重复子串判断 :star::即,判断当前密码串中 “是否存在长度 >2> 2 的重复子串”
    • 做法:逆序 遍历 line,从后向前截取长度为 33 的子串 s3s3,若当前串中存在和 s3s3 相同的子串,则 indexOf(s3) + 2 < i,即 NG;否则,则重复上述做法,继续逆序遍历 line
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        outter:
        while (in.hasNextLine()) {
            String line = in.nextLine();
            // 1、长度小于8
            if (line.length() <= 8) {
                System.out.println("NG");
                continue;
            }
            Set<Integer> set = new HashSet<>();
            for (int i = line.length() - 1; i >= 0; i--) {
                char c = line.charAt(i);
                if (Character.isDigit(c)) {
                    set.add(0);
                } else if (Character.isUpperCase(c)) {
                    set.add(1);
                } else if (Character.isLowerCase(c)) {
                    set.add(2);
                } else { // 特殊字符
                    set.add(3);
                }
                // 3、重复子串判断
                if (i < line.length() - 2) {
                    // 截取长度为3的子串
                    String s3 = line.substring(i, i + 3);
                    if (line.indexOf(s3) + 2 < i) {
                        System.out.println("NG");
                        continue outter;
                    }
                }
            }
            // 2、字符种类少于三种
            if (set.size() < 3) {
                System.out.println("NG");
                continue;
            }
            System.out.println("OK");
        }
        in.close();
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 18:05
点赞 评论 收藏
分享
05-23 19:02
吉林大学 Java
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 14:08
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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