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

密码验证合格程序

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 () {

    function isRight(str)
    {
        //长度过滤
        if(str.length<=8)
        {
            return false
        }

        //过滤空格和换行
        if(str.includes(' ')||str.includes('\n'))
        {
            return false
        }

        //判断字符种类
        let index=0
        let a=/[a-z]/  //小写
        let b=/[A-Z]/  //大写
        let c=/\d/     //数字
        let d = /[^a-zA-Z\d]/;  //非字母大小写和数字

        if(str.match(a))
        {
           index++
        }
        if(str.match(b))
        {
           index++
        }
        if(str.match(c))
        {
           index++
        }
        if(str.match(d))
        {
           index++
        }

        if(index<3)
        {return false}

        //判断重复子串(是连续的)  过滤>2
        //实际只用排出长度为3的重复就行,因为3以上的重复必然包含着3
        //那么切片切出所有的len=3子串
       
       let arr=[]
        for(let i=0;i<str.length;i++)
        {
            let sub=str.substring(i,i+3)
            if(sub.length===3)//排除不足的部分
            {
                arr.push(sub)
            }
        }
       
        let end=[...new Set(arr)]

        if(end.length!=arr.length)//长度不等,说明有重复
        {
            return false
        }
        // console.log(arr,end)


      
        return true

    }

    // Write your code here
    while(line = await readline()){
     

        console.log(isRight(line)?'OK':'NG')
       
    }
}()

全部评论

相关推荐

拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务