【机试题(实现语言:python3)】字符串运用-密码截取(最长回文子串)

题目描述
给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。
所谓回文串,指左右对称的字符串。
所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串
(注意:记得加上while处理多个测试用例)

输入描述:

输入一个仅包含小写字母的字符串

输出描述:

返回最长回文子串的长度

示例1
输入

cdabbacc

输出

4

说明

abba为最长的回文子串 

算法:

1、最大回文子串的一半: 
cdabbacc #完整字符串
abba  #最长的回文子串 
str_new = ab  #半串


 str1  #假设给定一个字符串 
a,b = divmode(len(str),2)  #a为可能的最大半串长度
遍历,如果不满足回文子串就不断减小 半串长度,递归

代码实现如下:

#str1:字符串,length:对称子串长度
def str_same(str1,length,len1):
    if length < 0:
        return length
    if length == 0:
        return 1
    flag = False
    a1,b1 = divmod(len1,2)
    for i  in range(a1):
        if i+length+length <=len1:
            str_new1 = str1[i:i+length]
            start1 = i+length
            end1 = i+length+length
            str_new2 = str1[start1:end1]
            str_new3 = str_new2[::-1]
            if str_new1 == str_new3:
                flag = True
                break
            else:
                pass 
    if flag == True:
        return length
    else:
        return str_same(str1,length-1,len1)
  



lists = []
while True:
    try:
        a = input()
        if a.islower():
            lists.append(a)
    except:
        break

for i in lists:
    num = len(i)
    len_str = 0
    a,b = divmod(num,2)
    len_str = str_same(i,a,num)
    if len_str == 1:
        print(len_str)
    else:
        print(len_str*2)
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值