Problem: HJ20 密码验证合格程序
题目描述
描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
数据范围:输入的字符串长度满足 1≤n≤100 $
输入描述:
一组字符串
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入:021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出:OK NG NG OK
解题思路
将字符串分割为字符数组,并且全部转为大写,并循环。
算法流程
- 输入字符串word,字符cha
- 定义count,统计
- 循环字符串
- 如果字符串当前字符等于cha,count加1
- 输出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();
复杂度
-
时间复杂度:
-
空间复杂度: