题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function () { // Write your code here while(line = await readline()){ // 判断长度,若小于等于8也就是没有超过8,则输出NG,并跳出本次读行操作 if(line.length <= 8) { console.log('NG'); continue; } // 判断密码是否有三种及三种以上的符号 let chargeSet = new Set(); for(let i = 0; i < line.length; i++) { // 如果大于等于3种了则直接跳出for循环 if(chargeSet.size >= 3) { break; } // 判断是否为数字 if(line.charCodeAt(i) >= 48 && line.charCodeAt(i) <= 57) { chargeSet.add('number'); } // 判断是否为小写字符 else if(line.charCodeAt(i) >= 65 && line.charCodeAt(i) <= 90) { chargeSet.add('upchar'); } // 判断是否为大写字符 else if(line.charCodeAt(i) >= 97 && line.charCodeAt(i) <= 122) { chargeSet.add('lowchar'); } // 其他 else { chargeSet.add('others'); } } // 最后如果小于3种则输出NG if(chargeSet.size < 3) { console.log('NG'); continue; } // 判断是否有字串,我们只需要判断长度为3的子串就可以了 chargeSet = new Set(); // 判断不符合的次数 let ngTimes = 0; // 由于判断的子串长度为3,则需要减少两次循环 for(let i = 0; i < line.length -2; i++) { // 如果不符合了,直接跳出循环 if(ngTimes!=0) { break; } // 子串 let kidStr = line.slice(i,i+3); // 判断是否有该子串,没有则加入我们的chargeSet里 if(chargeSet.has(kidStr)) { // 有该子串,则输出NG,让ngTimes自增一次,并结束该次循环 // 下次循环中则发现ngTimes不为0,不再循环 console.log('NG'); ngTimes++; continue; } else { chargeSet.add(kidStr); } } // 判断第三个条件是否输出过ngTimes,没有则表明三个条件都满足了,则可以输出OK if(ngTimes==0) { console.log('OK'); } } }()