描述 | |
---|---|
知识点 | 字符串,数组 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 | 一组或多组长度超过2的子符串。每组占一行 |
输出 | 如果符合要求输出:OK,否则输出NG
每行输出对应一组输入的结果; |
样例输入 | 021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000 |
样例输出 | OK NG NG OK |
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
//#include "Customer.h"
using namespace std;
bool strLengGt(string str, int length)
{
if (str.length() > length)
return true;
else
return false;
}
bool charCheck(string str)
{
int lowerChar = 0;
int upperChar = 0;
int numChar = 0;
int otherChar = 0;
for (int i = 0; i < str.length(); i++)
{
if (isalpha(str[i]) && str[i] >= 'a'&&str[i] <= 'z')
lowerChar = 1;
else if (isalpha(str[i]) && str[i] >= 'A'&&str[i] <= 'Z')
upperChar = 1;
else if (isalnum(str[i]))
numChar = 1;
else
otherChar = 1;
}
return (lowerChar + upperChar + numChar + otherChar) >= 3;
}
int mycmp(const void *p1, const void *p2)
{
return strcmp(*(char**)p1, *(char**)p2);
}
int getLen(char *p, char *q)
{
int ret = 0;
while ( *p && *p++ == *q++)
++ret;
return ret;
}
bool isHaveRepeatSubStr(string str)
{
char *s = new char[str.length()+1];
for (int i = 0; i < str.length(); i++)
s[i] = str[i];
s[str.length()] = '\0';
int len = str.length();
char **suffix = new char*[len];
for (int i = 0; i < len; i++)
suffix[i] = s + i;
qsort(suffix, len, sizeof(char*), mycmp);
int maxlen = 0;
for (int i = 0; i < len - 1; i++)
{
int tmp = getLen(suffix[i], suffix[i + 1]);
if (tmp>maxlen)
maxlen = tmp;
}
delete s;
delete suffix;
return maxlen <= 2;
}
int main()
{
string str;
while (cin >> str)
{
if (strLengGt(str,8) && charCheck(str) && isHaveRepeatSubStr(str))
cout << "OK" << endl;
else
cout << "NG" << endl;
}
return 0;
}