一、题目描述
密码要求:
- 长度超过8位
- 包括大小写字母.数字.其它符号,以上四种至少三种
- 不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
二、输入描述
一组字符串。
三、输出描述
如果符合要求输出:OK,否则输出NG
四、解题思路
- 读取输入的字符串;
- 检查字符串长度是否小于等于8,如果是,则输出 “NG” 并进入下一次循环;
- 调用函数 getMatch 判断字符串是否符合正则要求,如果符合,则输出 “NG” 并进入下一次循环;
- 调用函数 getString 检查字符串是否有长度大于2的重复子串,如果有,则输出 “NG” 并进入下一次循环;
- 如果以上条件都不满足,则输出 “OK”;
- 循环继续读取下一个字符串,直到没有输入。
五、JavaScript算法源码
function checkPassword(password) {
if (password.length <= 8) {
return "NG";
}
const regex = [/[^A-Za-z0-9]/, /[A-Z]/, /[a-z]/, /[0-9]/];
let count = 0;
for (let i = 0; i < regex.length; i++) {
if (regex[i].test(password)) {
count++;
}
}
if (count < 3) {
return "NG";
}
for (let i = 0; i < password.length - 2; i++) {
const substr = password.substr(i, 3);
if (password.indexOf(substr, i + 1) !== -1) {
return "NG";
}
}
return "OK";
}
六、效果展示
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。