题解 | #密码验证合格程序#C++解法,代码比较简洁了,要求3通过依次截取3个字符查找是否有重复
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
//思路: //要求3可以依次截取3个字符,然后从后往前查找截取的子串 //如果找到的位置不等于开始截取的位置,则说明有重复子串 #include<bits/stdc++.h> using namespace std; int main() { string str; while(cin>>str) { if(str.size()<9)//要求一 { cout<<"NG"<<endl; continue; } int flag1=0,flag2=0,flag3=0,flag4=0,num=0;//要求2满足标记以及种类个数 for(auto x:str)//判断要求2 { if(x>='a'&&x<='z') flag1=1; else if(x>='A'&&x<='Z') flag2=1; else if(x>='0'&&x<='9') flag3=1; else flag4=1; } num=flag1+flag2+flag3+flag4;//要求2满足种类个数 if(num<3) { cout<<"NG"<<endl; continue; } int i=0; for(i=0;i<str.size()-3;i++)//判断要求3 { string tmps=str.substr(i,3);//截取3个字符 if(str.rfind(tmps)>i)//从后往前查找子串,如果位置不是i说明有多个 { cout<<"NG"<<endl; break; } } if(i<str.size()-3) continue; cout<<"OK"<<endl;//前面都满足,就可以ok了 } }