题解 | #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    while (cin>>str) {
        if (str.length()<8)
        {
            cout<<"NG\n";
            str.clear();
            continue;
        }

        int flag = 0, count = 0;
        for (char cc : str) {
            if (cc>='0' && cc<='9') {
                if (!(flag&1)) {
                    flag |= 1;
                    count++;
                }
            }
            else if (cc>='A' && cc<='Z') {
                if (!(flag&2)) {
                    flag |= 2;
                    count++;
                }
            }
            else if (cc>='a' && cc<='z') {
                if (!(flag&4)) {
                    flag |= 4;
                    count++;
                }
            }
            else {
                if (!(flag&8)) {
                    flag |= 8;
                    count++;
                }
            }

            if (count>2) {
                break;
            }
        }

        if (count<3) {
            cout<<"NG\n";
            str.clear();
            continue;
        }

        bool rs = true;
        for (int i=0; i<=(str.length()-6); i++) {
            string tmp(str.substr(i, 3));
            auto index = str.find(tmp, i+3);
            if (index != string::npos) {
                rs = false;
                break;
            }
        }
        if (rs) {
            cout<<"OK\n";
        }
        else {
            cout<<"NG\n";
        }
        str.clear();
    }
}
// 64 位输出请用 printf("%lld")

判定至少包含三种字符:用整型变量flag四个位保存四种类型字符存在的情况,bit为1则表示含有,反正则没有。

判定重复子串:子串最少长度是3,只要长度为3的子串不存在重复,长度大于3的子串必不会重复。

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务