题解 | #密码验证合格程序# JavaScript 版解法
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
编写一个 helper 函数用于判断输入的字符串是否是合格的密码。需要经过三重检验:长度、字符种类数、长度大于 2 的包含公共元素的子串重复次数,根据检验结果返回答案。用到了字符串的 split、slice 方法和正则表达式。
const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout, }); const ipt = []; rl.on('line', function (line) { ipt.push(line); }).on('close', () => { Hj20(ipt); }); function Hj20(ipt) { function helper(s) { if (s.length <= 8) return 'NG'; // t1 t2 t3 t4 分别表示正则表达式匹配到的四种字符出现的次数 let [t1, t2, t3, t4] = [0, 0, 0, 0], kind = 0; for (let i = 0; i < s.length; i++) { if (/[0-9]/.test(s.charAt(i))) t1++; if (/[a-z]/.test(s.charAt(i))) t2++; if (/[A-Z]/.test(s.charAt(i))) t3++; if (/[^0-9^a-z^A-Z]/.test(s.charAt(i))) t4++; } // 计算出现的字符种类数 kind = (t1 ? 1 : 0) + (t2 ? 1 : 0) + (t3 ? 1 : 0) + (t4 ? 1 : 0); if (kind < 3) return 'NG'; // 判断是否有长度大于 2 的包含公共元素的子串重复 for (let i = 0; i < s.length - 2; i++) { let b = s.split(s.slice(i, i + 3)); if (b.length > 2) return 'NG'; } return 'OK'; } // 依次输出结果 for (let i = 0; i < ipt.length; i++) { console.log(helper(ipt[i])); } }#华为笔试##华为机试#
我的编程算法题 文章被收录于专栏
这是我在牛客上做的算法题的个人题解收录