HJ20 密码验证合格程序

222 阅读1分钟

Problem: HJ20 密码验证合格程序

题目描述

描述

密码要求:

1.长度超过8位

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

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

数据范围:输入的字符串长度满足 1≤n≤100 $

输入描述:

一组字符串

输出描述:

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

示例1

输入:021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000

输出:OK NG NG OK

解题思路

将字符串分割为字符数组,并且全部转为大写,并循环。

算法流程

  1. 输入字符串word,字符cha
  2. 定义count,统计
  3. 循环字符串
  4. 如果字符串当前字符等于cha,count加1
  5. 输出count

代码

function checkPassword(password) {
  // 长度超过8位
  if (password.length <= 8) {
    return false;
  }

  // 包括大小写字母、数字、其他符号,以上四种至少三种
  let count = 0;
  if (/[a-z]/.test(password)) {
    count++;
  }
  if (/[A-Z]/.test(password)) {
    count++;
  }
  if (/\d/.test(password)) {
    count++;
  }
  if (/[^a-zA-Z0-9]/.test(password)) {
    count++;
  }
  if (count < 3) {
    return false;
  }

  // 不能有长度大于2的包含公共元素的子串重复
  for (let i = 0; i < password.length - 2; i++) {
    const substr = password.substr(i, 3);
    if (password.indexOf(substr, i + 3) !== -1) {
      return false;
    }
  }

  return true;
}

function main() {
  const input = "Abc123!@#";
  const result = checkPassword(input);
  if (result) {
    console.log("OK");
  } else {
    console.log("NG");
  }
}

main();

复杂度

  • 时间复杂度: O(n)O(n)

  • 空间复杂度: O(1)O(1)