题解 | #密码验证合格程序# 三重循环判断子串是否重复
密码验证合格程序
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")