描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
输入描述:
一组字符串。
输出描述:
如果符合要求输出:OK,否则输出NG
分析
本题只要理解第三个条件了, 题目也就做出来了。
思路为:依次截取长度为3的子串,查找该子串是否在其它位置出现过即可。
注意lastIndexOf(item)
是从最后开始往前搜索, 如果要从前往后搜索,请使用IndexOf
AC代码(Js)
void (async function () {
while ((input = await readline())) {
if (input.length <= 8) {
console.log("NG");
} else {
let upperNum = 0,
lowerNum = 0,
numNum = 0,
otherNum = 0;
for (let char of input) {
if (char >= "A" && char <= "Z") {
upperNum = 1;
} else if (char >= "a" && char <= "z") {
lowerNum = 1;
} else if (char >= "0" && char <= "9") {
numNum = 1;
} else {
otherNum = 1;
}
}
if (upperNum + lowerNum + numNum + otherNum < 3) {
console.log("NG");
} else {
let hasRepeatStr = false;
for (let i = 0; i < input.length - 3; i++) {
let subStr = input.slice(i, i + 3);
if (input.lastIndexOf(subStr) > i) {
hasRepeatStr = true;
break;
}
}
hasRepeatStr ? console.log("NG") : console.log("OK");
}
}
}
})();