牛客HJ20 密码验证合格程序

描述

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)

输入描述:

一组字符串。

输出描述:

如果符合要求输出:OK,否则输出NG

分析

本题只要理解第三个条件了, 题目也就做出来了。
思路为:依次截取长度为3的子串,查找该子串是否在其它位置出现过即可。
注意lastIndexOf(item)是从最后开始往前搜索, 如果要从前往后搜索,请使用IndexOf

AC代码(Js)

void (async function () {
  while ((input = await readline())) {
    if (input.length <= 8) {
      console.log("NG");
    } else {
      let upperNum = 0,
        lowerNum = 0,
        numNum = 0,
        otherNum = 0;
      for (let char of input) {
        if (char >= "A" && char <= "Z") {
          upperNum = 1;
        } else if (char >= "a" && char <= "z") {
          lowerNum = 1;
        } else if (char >= "0" && char <= "9") {
          numNum = 1;
        } else {
          otherNum = 1;
        }
      }
      if (upperNum + lowerNum + numNum + otherNum < 3) {
        console.log("NG");
      } else {
        let hasRepeatStr = false;
        for (let i = 0; i < input.length - 3; i++) {
          let subStr = input.slice(i, i + 3);
          if (input.lastIndexOf(subStr) > i) {
            hasRepeatStr = true;
            break;
          }
        }
        hasRepeatStr ? console.log("NG") : console.log("OK");
      }
    }
  }
})();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值