题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出
OK NG NG OK
代码如下:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
bool mima(string s) {
if (s.length() <= 8) { return false; }
int a = 0;
int b = 0;
int c = 0;
int d = 0;
//看是否满足4种中至少有3种
for (int i = 0; i < s.length();i++) {
if (s[i]>='A'&&s[i]<='Z') {
a = 1;
}
else if (s[i] >= 'a'&&s[i] <= 'z') {
b = 1;
}
else if (s[i] >= '0'&&s[i] <= '9') {
c = 1;
}
else {
d = 1;
}
}
if (a + b + c + d < 3) { return false; }
//检查是否存在长度超2的子串重复
for (int i = 3; i < s.length()/2;i++) {
for (int j = 0; j < s.length()-i;j++) {
string tmp = s.substr(j,i);
int t = j + i;
for (; t < s.length()-i; t++) {
if (tmp.compare(s.substr(t, i)) == 0) { return false; }
}
}
}
return true;
}
int main() {
string input;
while (cin >> input) {
if (mima(input)) { cout << "OK" << endl; }
else {
cout << "NG" << endl;
}
}
return 0;
}