华为机试HJ20:密码验证合格程序

简介: 华为机试HJ20:密码验证合格程序

题目描述:

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有相同长度大于2的子串重复

输入描述:

一组或多组长度超过2的字符串。每组占一行

输出描述:

如果符合要求输出:OK,否则输出NG

示例:

输入:021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000

输出:OK NG NG OK

解题思路:

首先判断输入的密码长度是否大于等于8 ,满足条件1;再分别统计大写小写数字以及其他字符出现的个数,若某类字符出现次数不为0则让flag加一,flag大于等于3则满足条件2;因为不能有相同长度大于2的子串重复,也就是密码中任意3个字符的组合不能再出现第二次,那么可以从密码起点开始遍历,提取以某点为起点的三个字符组成一个新的子字符串,再从这个点后面的点开始查找有没有一样的字符串,若没找到则满足条件3。

测试代码:

#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
int main()
{
    vector<string> input;
    vector<string> result;
    string in;
    while(cin>>in)
    {
        int lower=0;
        int upper=0;
        int number=0;
        int other=0;
        int flag=0;
        if(in.size()<=8)
        {
            result.push_back("NG");
            continue;
        }
        for(int i=0;i<in.size();++i)
        {
            if(in[i]>=65&in[i]<=90)
                upper++;
            else if(in[i]>=97&in[i]<=122)
                lower++;
            else if(in[i]>=48&in[i]<=57)
                number++;
            else
                other++;
        }
        if(lower!=0)flag++;
        if(upper!=0)flag++;
        if(number!=0)flag++;
        if(other!=0)flag++;
        if(flag<3)
        {
            result.push_back("NG");
            continue;
        }
        bool isfind=false;
        for(int i=0;i<in.size()-2;++i)
        {
            string temp=in.substr(i,3);
            if(in.find(temp,i+3)!=in.npos)
            {
                isfind=true;
                break;
            }
        }
        if(isfind)
        {
            result.push_back("NG");
            continue;
        }
        result.push_back("OK");
    }
    for(auto i:result)
    {
        cout<<i<<endl;
    }
    return 0;
}
目录
打赏
0
0
0
0
15
分享
相关文章
|
8月前
|
C++
【PTA】L1-016 验证身份(C++)
【PTA】L1-016 验证身份(C++)
104 0
【PTA】L1-016 验证身份(C++)
每天一道C语言编程:合格密码的判定
每天一道C语言编程:合格密码的判定
64 0
hdu1279 验证角谷猜想
hdu1279 验证角谷猜想
63 0
【每日一题Day92】LC2299强密码检验器 II | 模拟 状态压缩
思路:首先判断密码长度是否大于等于8,若是则判断该密码是否包含至少一个数字、小写字母、大写字母以及特殊字符,并相邻字符不相同,若满足条件则返回true。
118 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等