华为上机真题密码要求

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题密码要求相关的知识,希望对你有一定的参考价值。

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.2 输入描述

1.3 输出描述

二、解题思路

三、代码实现

四、时间复杂度


 

一、题目描述

密码要求:

1.长度超过8位;

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

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

1.2 输入描述

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

1.3 输出描述

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

二、解题思路

本题是一道模拟题,按照密码要求一次检查即可。

(1)条件 1:如果字符串长度小于等于 8 位,则不符合要求;

(2)条件 2:计算有多少种字符,少于三种则不符合要求,可以使用数组计数或者位运算计数;

(3)条件 3:只需要判断长度为 3 的子串是否有重复即可,这个可通过两层 for 循环或者 find 函数来实现。

三、代码实现

代码实现如下所示。

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

bool checkPasswd(string str)

    // 条件 1
    if (str.size() <= 8) 
        return false;
    

    // 条件 2
    int n = str.size();
    int num = 0;
    for (int i = 0; i < n; ++i) 
        if (isupper(str[i])) 
            num |= 1;
         else if (islower(str[i])) 
            num |= 2;
         else if (str[i] >= '0' && str[i] <= '9') 
            num |= 4;
         else 
            num |= 8;
        
    

    int m = 0;
    int p = 1;
    for (int i = 0; i < 4; ++i) 
        if (num & p) 
            m++;
        
        p = p * 2;
    
    if (m < 3) return false;

    // 条件 3
    for (int i = 0; i < n - 2; ++i) 
        int idx = str.find(str.substr(i, 3), 0);
        int idy = str.find(str.substr(i, 3), idx + 1);
        if (idy != -1) 
           return false;
        
    
    return true;


int main()

    string str;
    while (getline(cin, str)) 
        bool flag = checkPasswd(str);
        if (flag) 
            cout<<"OK"<<endl;
         else 
            cout<<"NG"<<endl;
        
    
    return 0;

四、时间复杂度

时间复杂度:O(n + 3n^2)。

在上述代码中,假设字符串长度为 n,第一个 for 循环遍历字符种类的时间复杂度为 O(n),计算是否存在子串的时间复杂度为 O(3n^2),所以总的时间复杂度为 O(n + 3n^2)。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


以上是关于华为上机真题密码要求的主要内容,如果未能解决你的问题,请参考以下文章

华为上机真题区间交集

华为上机真题事件推送

华为上机真题 2022玩牌高手

华为上机真题 2022数组组成的最小数字

华为上机真题 2022流水线

华为上机真题寻找相同子串