题解 | #密码验证合格程序# 三重循环判断子串是否重复
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <iostream>
#include <vector>
using namespace std;
int main() {
string s;
//按行处理每一条密码
while(getline(cin,s)){
//1.长度超过8位
if(s.size()<8){
cout<<"NG"<<endl;
continue;
}
//2.包括大小写字母.数字.其它符号,以上四种至少三种
//遍历字符串 统计每种类型的个数。
vector<int> a(4,0);
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9')
a[0]++;
if(s[i]>='A'&&s[i]<='Z')
a[1]++;
if(s[i]>='a'&&s[i]<='z')
a[2]++;
else
a[3]++;
}
int count=0;
for(int i=0;i<4;i++){
if(a[i]!=0){
count++;
}
}
if(count<3){
cout<<"NG"<<endl;
continue;
}
//不能有长度大于2的包含公共元素的子串重复
//三重循环,依次比较
bool p=false;
for(int i=3;i<s.size();i++){//子串长度
for(int j=0;j<s.size()-i;j++){//子串起始位置
for(int k=j+1;k<s.size()-i;k++)
{
if(s.substr(j,i)==s.substr(k,i)){
cout<<"NG"<<endl;
p=true;
break;
}
}
if(p) break;
}
if(p) break;
}
if(p) continue;
cout<<"OK"<<endl;
}
}
// 64 位输出请用 printf("%lld")