Appearance
HJ20 密码验证合格程序
本节目标:理解“HJ20 密码验证合格程序”的核心思路,并能把它用于实际开发或面试表达。 描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行) 数据范围:输入的字符串长度满足 1≤�≤100 1≤n≤100 输入描述: 一组字符串。 输出描述: 如果符合要求输出:OK,否则输出NG 示例1 输入: 021Abc9000021Abc9Abc1021ABC9000021$bc9000 ==复制== 输出: OKNGNGOK
关键点:
- 不能有长度超过2的子串重复,我们只要检查长度为3的子串,因为长度为4,长度为5的重复,必然会造成长度为3的重复;
- 只要检查在我们截取的子串是否in剩余字符串来判断重复即可;
def is_valid_password(s):
检查长度
if len(s) <= 8: return False types = [0, 0, 0, 0] # 分别对应 大写字母、小写字母、数字、其他符号
检查类型多样性
for char in s: if char.isupper(): types[0] = 1 elif char.islower(): types[1] = 1 elif char.isdigit(): types[2] = 1 else: types[3] = 1 if sum(types) < 3: return False
检查无重复子串
for i in range(len(s) - 2): # 只需遍历到倒数第三个字符 sub = s[i:i+3] if sub in s[i+1:]: # 查看子串是否在后面的字符串中出现 return False return True
读取并验证每个密码
while True: try: password = input() print("OK" if is_valid_password(password) else "NG") except EOFError: break
