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

密码验证合格程序

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

#include <cctype>
#include <iostream>
#include <random>
#include <string>
#include <unordered_map>
using namespace std;

string check(string s){
    if (s.size() <= 8) return "NG";  //1.密码长度
    //2.字符种类
    bool h_low = false, h_up = false, h_di = false, h_oth = false;
    for (char c : s) {
        if (islower(c)) h_low = true;
        else if (isupper(c)) h_up = true;
        else if (isdigit(c)) h_di = true;
        else h_oth = true;
    }
    if((h_low + h_up + h_di + h_oth) < 3) return "NG";
    //3.长度大于2的重复字符串
    string subStr;
    unordered_map<string, int> hash;	//用一个哈希表存储所有长度为3的字符串
    unordered_map<string, int>::iterator it;
    for (char c : s){
        if (subStr.size() < 3){	//字符串长度小于3的时候继续加字符串
            subStr += c;
        }
        if (subStr.size() >= 3){		//字符串长度大于等于3的时候滚动窗口,并加入哈希表中
            hash[subStr]++;
            subStr.erase(0, 1);
            subStr += c;
        }
    }
    for (it = hash.begin(); it != hash.end(); it ++){
        if (it->second >= 2) return "NG";		//寻找是否有重复的长度>=3的子串
    }

    return "OK";
}

int main() {
    string s;
    while(cin >> s) {
        string res = check(s);
        cout << res << endl;
    }
    return 0;
    
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务