题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
# s.isupper(), s.islower(),s.isdigit(), isalnum()
# try, except break
# 难点在于如何判断是否有子串重复
def has_repeat_substring(s):
# 判断方法:双指针,i指向第一个指针,j指向第二个指针。每到一个新的i,j就在i+3往后遍历一遍,把子串记录下来
# 如果当前子串曾经出现过,则return true,都循环完则返回false
sub_string = []
for i in range(len(s)):
for j in range(i+3,len(s)+1): #字串长度大于2
a = s[i:j]
if a in sub_string:
return True
else:
sub_string.append(a)
return False
while True:
try:
s = input()
flag = [False]*5
if len(s) > 8:
flag[0] = any(char.isupper() for char in s)
flag[1] = any(char.islower() for char in s)
flag[2] = any(char.isdigit() for char in s)
flag[3] = any(not char.isalnum() for char in s)
flag[4] = not has_repeat_substring(s)
if sum(flag[0:4])>= 3 and flag[4]:
print('OK')
else:
print('NG')
else:
print('NG')
except:
break