寻找最大回文数(Python实现)

问题描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。

示例 2:
输入: “cbbd”
输出: “bb”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

思路:分别取字符串中每一个字符,以其为中心,左右匹配最大回文序列
代码:

class Solution:
    def dual_str(self,index,s):
        flag=1
        ss=s[index]
        ff=0
        if s[index]==s[index+1]:
            ff=1
            r_index=index+1     
            l_index=index
            ss=s[index]
            while flag:
                if (r_index+1)<len(s)and(l_index-1)>=0:
                    r=s[r_index+1]  
                    l=s[l_index-1]  
                    r_index+=1    
                    l_index-=1    
                    if r==l:
                        ss+=r 
                        
                        
                    else:
                        flag=0
                else:
                    flag=0
        OU=1  
        if ff==0:
            ss=''
        ss=ss[::-1]+ss
        return ss,OU
    
    def per_str(self,index,s):
        flag=1
        OU=0
   
        r_index=index     
        l_index=index 
        ss=s[index]     
        while flag:
            if (r_index+1)<len(s)and(l_index-1)>=0:
                r=s[r_index+1]  
                l=s[l_index-1]  
                r_index+=1    
                l_index-=1    
                if r==l:
                    ss+=r    
                    
                else:
                    flag=0
            else:
                flag=0
        ss=ss[::-1]+ss[1:]
        
        return ss,OU
                    
    def longestPalindrome(self,s):
        ss=''
        
        if len(s)==1:
            return s[0]
        for i in range(len(s)-1):
            temp,OU=self.per_str(i,s)
            
            if len(ss)<len(temp):
                ss=temp
               
            temp,OU=self.dual_str(i,s)
            print(temp)
            if len(ss)<len(temp) or (len(temp)==1 and OU==1):
                ss=temp
                
        return ss

时间、空间复杂度都不管了,终于实现了,老泪纵横。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值