HJ20_密码验证合格程序_仿真_判断重复子串的巧妙

这题最巧的是如何判断密码含有字符串。

最巧妙的是如何判断一串字符串中是否包含重复子串:

思路:for 循环提取可能的重复子串,通过子串作为划分字符串的依据,判断划分后的字符串是否长度大于等于3,则可判断字符串中是否含有两个或两个以上重复子串。简短两行,要注意index不能超出数组。

16     for i in range(len(s)-3):
17         if len(s.split(s[i:i+3])) >= 3:
18             return 0

 

下面是高赞题解,直接赋值高手答案如下:

 1 def check(s):
 2     if len(s) <= 8:
 3         return 0
 4     a, b, c, d = 0, 0, 0, 0
 5     for item in s:
 6         if ord('a') <= ord(item) <= ord('z'):
 7             a = 1
 8         elif ord('A') <= ord(item) <= ord('Z'):
 9             b = 1
10         elif ord('0') <= ord(item) <= ord('9'):
11             c = 1
12         else:
13             d = 1
14     if a + b + c + d < 3:
15         return 0
16     for i in range(len(s)-3):
17         if len(s.split(s[i:i+3])) >= 3:
18             return 0
19     return 1
20 
21 while 1:
22     try:
23         print('OK' if check(input()) else 'NG')
24     except:
25         break

下面自己的解答,虽然是正确的,但是一对比就能看出高手设计的优雅和巧妙

 1 import sys
 2 in1=[]
 3 for i in sys.stdin:
 4     in1.append(str(i.strip()))
 5 #print(in1)
 6 for i in in1:
 7     d={}
 8     check=0
 9     if len(str(i))<8:
10         print("NG")
11         check=1
12     else:        
13         if i.isdigit() or i.isalpha():
14             print("NG")   
15             check=1
16         else:
17             for j in i:
18                 if j=="\n" or j==' ':
19                     print("NG") 
20                     check=1
21                 elif j.isdigit():
22                     d[1]=1
23                 elif j.isupper():
24                     d[2]=1
25                 elif j.islower():
26                     #print(j,i)
27                     d[3]=1
28                 else:
29                     d[4]=1
30     if check==0 and len(d)<3:
31         print("NG") 
32         check=1
33     #print(d,i)
34     if check==0:
35         for n,j in enumerate(i):
36             for m,k in enumerate(i):
37                 if k==j and i[n:n+3]==i[m:m+3] and n+1<m:
38                     print("NG") 
39                     check=1
40                     break
41             if check==1:
42                 break
43     if check==0:
44         print("OK") 

 

posted @ 2023-03-28 18:57  Aneverforget  阅读(64)  评论(0编辑  收藏  举报