最长回文子串

       回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。 输入一个字符串Str (Str的长度 <= 1000) ,输出Str里最长回文子串的长度L。例如Str='daabaac',则 子串'aabaa'是最长回文子串,因此 输出L=5 。题目可参考
分析:
       如果Str本身是回文串,那么显然L=len(Str)。如果不是,那么尝试Str[:len(Str)-1](Python的切片
http://saltriver.blog.163.com/blog/static/2260971542016525103755389/ ),这样不断反向推进,如果是回文串,那么就不用再往下了,因为即使后面仍有回文串,显然长度没这个大。但这是索引值0为起点的最长回文子串,不同的索引值起点回文串可能会不一样,长度也可能会有区别,所以这是一个两层循环。看代码:
# coding=utf-8

def is_palindrome(s): # 判断是否为回文串
return s == s[::-1]

Str = input()
StrLength, L = len(Str), 0

for i in range(StrLength):
for j in range(StrLength - 1, i - 1, -1): # 从串尾向索引i反向推进
if Str[i] == Str[j]: # 回文串首尾字符相同
if is_palindrome(Str[i:j + 1]):
if j - i + 1 > L:
L = j - i + 1
break # 已找到索引值i下最长回文串
print(L)

给出一个Str的测试用例,长度为1000。
ACBCCBCBCAABBBBBACBACCBACAAACABBAACCBBBCCCCBCCABCBAAACCBBBCCACCCCCBACCCBBCAACCAACCBAAAAAAABABBBAAACABCBABCCBCCBBBCABABCBCAABACCCBACCCACABBCABBBBCCCCBCCBABBACCCCCCABCBBACCACCBAABBCAACBBAABBCBABBAABBCBABBCBCCCCBACAACCABCBBCABBBBBBABCBABCBCABABCABCABCBAACBCBBCBCBBABCBACCCAABAAAACACBACAABCABABCBAACABBABABCAACBBBBBCCAABCBBBABCBBBAAACBAAAABAACCBCCCCABCCAAAABACCACBBAABCACBABBCBCCBCCBBAAACCBABCABCBBAABACBACCACBBBCCACBBBBCACBAABCCCBCBBCBAAAABAAACCCAACACABBBABBABCBCCCCACBCBABACABBABBBACBCAABBBBACBCABAABBCCBCCBBBBCBBCAAABABCAAACACBACABCCACAACACBACBABCABACABCACBBBACBBABBBCBCABCCBAACCBCBBBBBAACACBACCABBABACCCAAABAABCCCABCACCAAAAABAACABBBABABCBABCCCBCCBCBBBCAACCCBBAACABABBBACCBCBBBACBCCAACACBCBACACABCCAABACCCBCCCCBBCACACBABBCBACABCCCBBCBCBABBBACBACBCAACCBBCCBCBCBCAACAACBABCACCBCBAABBBCCAACACBCBCCBCCBACCACBABBCBACBBBABBABCABCCBABAABACAABABACCCACCBAABBAABCACABACCCBBCCAAACACBACACCAABACBCBBCABBBBAACBBACBACCBBCAAACBBCBBACBBBAACBCBBAACBCBCABAABBACCBAACBBCBCBAACAACABAAABBCCACCCACBBAABBBCBAABAACBBABBAACCABA
输出结果为L = 14。
运行时间大约1秒,因为双层for循环,再加判断回文运算,时间复杂度为O(N**3), 对于更大长度的字符串, 显然需要更快的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值