HJ32_密码截取_模拟_动态规划

发布时间 2023-03-25 15:03:51作者: Aneverforget

思路:通过for循环获得可能是对称字符串的中间数,通过左右跳动寻找对称字符串,如果是则放进l列表中。

该思路通过模拟分析三种情况,分别用三个独立if,分别判断的方法,来实现对称密码截取。

 

后看高赞题解,发现其代码只有8行。尝试分析高手思路,其思路为,1、找到通过循环找到两个相同字符。2、通过两个相同字符中间的字符串正反序对比判断,可知,两相同字符中间的字符串是否为对称字符串。

具体思路实现:

1、用两个for循环取字符判断字符是否相同

2、取两相同字符中间的字符串正反序对比,合适的则放入列表中。

代码如第二个代码框。

 1 a=input()
 2 l1=[]
 3 l=[]
 4 for i,item in enumerate(a):
 5     if i>0 and i<len(a)-1:
 6         i1=i-1
 7         i2=i+1
 8         if a[i1]==a[i2]:
 9             while i1>=0 and i2<len(a):
10                 if a[i1]!=a[i2]:
11                     break
12                 else:
13                     l.append(a[i1:i2+1])
14                     i1-=1
15                     i2+=1
16         i1=i-1
17         i2=i+1
18         if a[i2]==a[i]:
19             i2+=1
20             while i1>=0 and i2<len(a):
21                 if a[i1]!=a[i2]:
22                     break
23                 else:
24                     l.append(a[i1:i2+1])
25                     i1-=1
26                     i2+=1
27         i1=i-1
28         i2=i+1
29         if a[i1]==a[i]:
30             i1-=1
31             while i1>=0 and i2<len(a):
32                 if a[i1]!=a[i2]:
33                     break
34                 else:
35                     l.append(a[i1:i2+1])
36                     i1-=1
37                     i2+=1
38 for i in l:
39     l1.append(len(i))
40 if l1:
41     print(max(l1))

思路:

1 a=input()
2 l=[]
3 for i in range(len(a)-1):
4     for j in range(i+1,len(a)):
5         if a[i]==a[j] and a[i+1:j]==a[j-1:i:-1]:            
6             l.append(a[i:j+1])
7 b=[len(i) for i in l]
8 print(max(b))