代码如下
a='abcba'
n=5
flag=0
for i in range(len(a)+1-n):
if(a[i:i+n]==a[i+n-len(a)-1:i-len(a):-1]):
print('YES')
flag=1
if(flag==0):
print('NO')
题主,你这样写逻辑不太对喔~
len(a)=5,所以range(len(a)+1-n)即range(1),所以循环中i=0
if(a[i:i+n]==a[i+n-len(a)-1:i-len(a):-1])即if(a[0:5]==a[-1:-5:-1])
此处的a[-1:-5:-1]中的-5,并不包括-5,可以修改为:
a='abcba'
n=5
flag=0
for i in range(len(a)+1-n):
if(a[i:i+n]==a[i+n-len(a)-1::-1]):
print('YES')
flag=1
if(flag==0):
print('NO')
你这个for循环只执行一次。i=0
时,a[i:i+n]
是abcba
,但a[i+n-len(a)-1:i-len(a):-1]
是abcb
,两者不相等,所以不会输出yes。
看下程序的运行过程
a = 'abcba'
n = 5
flag = 0
for i in range(len(a) + 1 - n):
print(i)#0
print(i + n - len(a) - 1)#-1
print(i - len(a))#-5
print(a[i + n - len(a) - 1:i - len(a):-1])#abcb
print(a[i:i + n])#abcba
if (a[i:i + n] == a[i + n - len(a) - 1:i - len(a):-1]):
print('YES')
flag = 1
if (flag == 0):
print('NO')