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

密码验证合格程序

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();
    }
}
全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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