作者:weixin_41980474 来源:CSDN博客 时间:2018-05-16 21:13:31 我要评论

1.贴题

题目来自PythonTip
回文子串


给你一个字符串a和一个正整数n,判断a中是否存在长度为n的回文子串。如果存在,则输出YES,否则输出NO。
回文串的定义:记串str逆序之后的字符串是str1,若str=str1,则称str是回文串,如”abcba”.


2.说明

一开始将长度为n的字符串在a的逆序字符串里找,找到yes,找不到no,代码如下

b = a[::-1]
for x in range(len(a)-n):
    if a[x:x+n] in b:
        print("YES")
        break
else:
    print("NO")

提交后说不对,检查了一下代码发现意思理解有偏差。不是存在逆序就可以了,位置不能变动,更改代码如下

for x in range(len(a)-n):
    b = a[x:x+n]
    c = b[::-1]
    if b == c:
        print("YES")
        break
else:
    print("NO")

提交后发现还是不对,但是测了几个数据都没有发现问题,最后测到a = "abcba"; n = 5发现问题了,因为len(a)-n为0所以进不去循环,而a字符串整个是回文的,于是增加了特殊讨论。

3.参考代码

if len(a)-n == 0: #特殊情况讨论,如果n等于字符串长度
    if a == a[::-1]: #判断a整个是否为回文
        print("YES")
    else:
        print("NO")
else: #如果n不等于字符串长度
    for x in range(len(a)-n): #依次取长度为n的字符串
        b = a[x:x+n] #取出为b
        c = b[::-1] #将其逆序为c
        if b == c: #比较b和c是否相等
            print("YES") #如果相等说明是回文,打印yes
            break #退出循环
    else: #如果遍历完字符串还没有找到回文
        print("NO") #打印no

4.其他写法

看了别人的写法才发现是range的范围写错了,正确的应该还要加一,一行代码来自 ChristinaT

print('YES' if [a[i:i+n] for i in range(0,len(a)-n+1) if a[i:i+n] == a[i:i+n][::-1]] else 'NO')
作者:weixin_41980474 发表于2018/5/16 21:13:31 原文链接
阅读:0 评论:0 查看评论
15阅读 | 0评论
你的回应
写文章

联系我们