HJ32_密码截取_模拟_动态规划
思路:通过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))