题解 | #密码验证合格程序# 三重循环判断子串是否重复

密码验证合格程序

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")

全部评论

相关推荐

徐新高:号已经废了 建议重开一个账号投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务