华为od机试真题:密码输入检测(Python)

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

给定用户密码输入流input,输入流中字符 '<' 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。

密码安全要求如下:

  1. 密码长度>=8;
  2. 密码至少需要包含1个大写字母:
  3. 密码至少需要包含1个小写字母;
  4. 密码至少需要包含1个数字;
  5. 密码至少需要包含1个字母和数字以外的非空白特殊字符;

注意空串退格后仍然为空串,且用户输入的字符串不包含 '<' 字符和空白字符。

输入描述

用一行字符串表示输入的用户数据,输入的字符串中 '<' 字符标识退格,用户输入的字符串不包含空白字符,例如:ABC<c89%000<

输出描述

输出经过程序处理后,输出的实际密码字符串,并输出该密码字符串是否满足密码安全要求。两者间由 ',' 分隔,例如:ABc89%00,true

示例1

输入:
ABC<c89%000<

输出:
ABc89%00,true

解释: 多余的C和0由于退格被去除,最终用户输入的密码为ABc89%00,且满足密码安全要求输出true

示例2

输入:
ABC

输出:
ABC,false

解释: 不满足密码安全要求

题解

字符串模拟题, 代码思路:

  1. 字符处理:使用Deque(双端队列)来处理字符输入和退格操作。遍历输入的字符数组,如果是退格字符'<',则从队尾删除一个字符;否则,将字符加入队尾。
  2. 密码安全要求判断:统计密码中包含的小写字母、大写字母、数字和其他字符的数量(c1c2c3c4)。判断密码是否满足安全要求:长度大于等于8,同时包含至少一个小写字母、一个大写字母、一个数字和一个其他字符。
  3. 输出结果:将密码字符串和判断结果以字符串格式输出,使用逗号分隔。

Python

def process_password(input_str):
    # 使用列表模拟双端队列
    password_queue = []
    for char in input_str:
        if char.isspace():
            continue

        # 退格,删除最后一个字符
        if char == '<' and password_queue:
            password_queue.pop()
        else:
            password_queue.append(char)

    # 构建密码字符串
    password = ''.join(password_queue)

    # 统计各种类型字符的数量
    c1, c2, c3, c4 = 0, 0, 0, 0
    for char in password_queue:
        if 'a' <= char <= 'z':
            c1 += 1
        elif 'A' <= char <= 'Z':
            c2 += 1
        elif '0' <= char <= '9':
            c3 += 1
        else:
            c4 += 1

    # 判断密码是否满足安全要求
    valid = len(password) >= 8 and c1 * c2 * c3 * c4 != 0

    # 输出结果
    print(f"{password},{str(valid).lower()}")


# 从标准输入读取一行字符串
input_str = input()
# 处理密码
process_password(input_str)

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#面经##华为od手撕代码##华为od机试##笔试##秋招#
全部评论

相关推荐

就叫小宁吧:没事,骗一次就老实不会幻想有好事砸中自己了😂😂
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务