题解 | #密码验证合格程序#

密码验证合格程序

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');
        }

    }
}()

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务