题解 | #密码验证合格程序#
密码验证合格程序
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')
       
    }
}()

