首页 > 其他 > 详细

获取字符串中长度最长的回文字符串

时间:2019-03-08 00:31:59      阅读:194      评论:0      收藏:0      [点我收藏+]

 

def get_f_l(s_length,s,list_all,last_d):
    max_l=0
    first_d=0
    last_d=0
    for i in range(len(list_all)):
        if((i+1)==len(list_all)):
            break
        for j in range(i+1,len(list_all)):
            diff=list_all[j]-list_all[i]+1
            if(list_all[i]==0):
                if(list_all[j]==s_length-1):
                    if(s==s[::-1]):
                        return 0,list_all[j]
                else:
                    if(s[:list_all[j]+1]==s[list_all[j]::-1]):
                        if(diff>max_l):
                            max_l=diff
                            first_d=0
                            last_d=list_all[j]
            else:
                if(list_all[j]==s_length-1):
                    if(s[list_all[i]:]==s[list_all[j]:list_all[i]-1:-1]):
                        if(diff>max_l):
                            max_l=diff
                            first_d=list_all[i]
                            last_d=list_all[j]
                else:
                    if(s[list_all[i]:list_all[j]+1]==s[list_all[j]:list_all[i]-1:-1]):
                        if(diff>max_l):
                            max_l=diff
                            first_d=list_all[i]
                            last_d=list_all[j]
    return first_d,last_d
                    

def solution(s):
    s_length=len(s)
    max_len=0
    f=0
    l=0
    s_x=set(s)
    for i in s_x:
        last_d=s.rfind(i)
        list_all=[]
        oper_s=s
        i_num=0
        while(True):
            x=s.find(i,i_num)
            if(not x==-1):
                i_num=x+1
                list_all.append(x)
            else:
                break
        if(len(list_all)==1):
            continue

        first_d,last_d=get_f_l(s_length,s,list_all,last_d)
        diff=last_d-first_d
        if(diff>max_len):
            f=first_d
            l=last_d
            max_len=diff
    return s[f:l+1]
    
s="abccccde"
print(solution(s))

 

获取字符串中长度最长的回文字符串

原文:https://www.cnblogs.com/sea-stream/p/10493421.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!