【华为笔试-3】HJ20 密码验证合格程序
1.【华为笔试-3】HJ20 密码验证合格程序
HJ20 密码验证程序
输入: 021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出: OK NG NG OK
注:输入结束后有中止结束标志EOF【这个原题给的时候无说明,自己跑他的用例和看论坛看出来的】
-
题解:
要点有三个,分别是:长度超过八位、包含三种以上、和公共子字符串,以及输入输出
- 输入输出:以为如果知道了他有EOF终止输入的话,可以使用
sys.stdin.read
或者使用while
+try
的方式,我是用的后者,方便调试。 - 长度超过八位就不解释了
- 至少三种以上:遍历每个字符,如果出现了大、小写、数字、字符、那么出现的情况就记为1,无则0.最后统计满足情况
- 公共子序列:
- 遍历密码获得长度为3的子序列【如果不存在则append,否则直接退出】(因为不能大于2,就是最少是3个)
- 输入输出:以为如果知道了他有EOF终止输入的话,可以使用
-
难度:
- 如果题目告诉了有EOF的情况下挺简单,没解释清楚有EOF我也不会获取不定长输入
-
code:
""" 021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000 OK NG NG OK """ dig,low,up,pun = 0,1,2,3 OK = "OK" NotOk = "NG" import string def judge_whether_lawful(input_str:str)->str: strs = [one_char for one_char in input_str] ok_count_list = [0,0,0,0] #4 situation ok_count = 0 if len(strs) < 8: return NotOk for idx in range(len(strs)): if strs[idx] in string.digits: ok_count_list[dig] = 1 elif strs[idx] in string.ascii_lowercase: ok_count_list[low] = 1 elif strs[idx] in string.ascii_uppercase: ok_count_list[up] = 1 elif strs[idx] in string.punctuation: ok_count_list[pun] = 1 ok_count = sum(ok_count_list) public_list = [] for idx in range(2,len(strs)): get_public = input_str[idx-2:idx] + input_str[idx] if get_public in public_list: return NotOk else: public_list.append(input_str[idx-2:idx]+input_str[idx]) if ok_count >= 3: return OK else: return NotOk if __name__ == '__main__': input_list = [] while True: try: temp_input = input() print(judge_whether_lawful(temp_input)) except: break
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix