题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出
OK NG NG OK
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s,temp;
while(cin>>s)
{
int len=s.size();
if(len<=8)
cout<<"NG"<<endl;
else
{
int i=0,cnt1=0,cnt2=0,cnt3=0,cnt4=0;
for(i=0;i<len;i++)
{
if(s[i]>='0'&&s[i]<='9')
cnt1=1;
else if(s[i]>='A'&&s[i]<='Z')
cnt2=1;
else if(s[i]>='a'&&s[i]<='z')
cnt3=1;
else
cnt4=1;
}
if(cnt1+cnt2+cnt3+cnt4<3)
cout<<"NG"<<endl;
else
{
//判别是否有长度超过2的子串重复
int i=0,j=0;
int flag=0;
for(i=0;i<len;i++)
{
for(j=3;i+j<len;j++)
{
temp=s.substr(i,j);
string::size_type idx=s.find(temp,i+j+1);//这个地方是关键
if(idx!=string::npos)
{
flag=1;//表示找到相同子串
break;
}
else
{
//flag=0;
continue;
}
}
if(flag==1)
{
cout<<"NG"<<endl;
break;
}
}
if((i==len)&&(flag==0))
cout<<"OK"<<endl;
}
}
}
return 0;
}