题解 | #密码验证合格程序#
密码验证合格程序
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')
}
}()
查看3道真题和解析