ACM—leetcode—Longest Palindromic Substring Python解决方法(附代码和思路)

class Solution(object):
#暴力破解法
#     def ispalindromic(self, s):
#         if s == s[::-1]:
#             return True
#         else:
#             return False
        
        
#     def longestPalindrome(self, s):
#         """
#         :type s: str
#         :rtype: str
#         """
#         if len(s) <= 1:
#             return s
#         final_string = ""
#         for i in range(len(s)-1):
#             for j in range(len(s)-i):
#                 substring = s[j:(j+i+2)]
#                 if self.ispalindromic(substring) and len(substring) > len(final_string):
#                     final_string = substring
#         return final_string
    
    
    # def longestPalindrome(self, s):
    #     """
    #     :type s: str
    #     :rtype: str
    #     """
    #     if len(s) <= 1:
    #         return s
    #     final_string = ""
    #     re_string = s[::-1]
    #     for i in range(len(s)-1):
    #         for j in range(len(s)-i):
    #             if s.find(re_string[j:i+j+2]) !=-1:
    #                 if len(re_string[j:i+j+2]) < len(final_string):
    #                     final_string = re_string[j:i+j+2]
    #     return final_string
    
#枚举法
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        final_string = ""
        
        if len(s) <= 1:
            return s
            
        # if len(s) % 2 ==0:
        for i in range(len(s)-1):
            j=0
            while i-j >= 0 and (i+1)+j < len(s):
                if s[i-j] == s[(i+1)+j] :
                    if len(final_string) < len(s[i-j:(i+1)+j+1]):
                        final_string = s[i-j:(i+1)+j+1]
                else:
                    break
                j = j + 1
                
        
        # if len(s) % 2 ==1:
        for i in range(len(s)-1):
            j=0
            while i-j >= 0 and i+j < len(s):
                if s[i-j] == s[i+j]:
                    if len(final_string) < len(s[i-j:i+j+1]):
                        final_string = s[i-j:i+j+1]
                else:
                    break
                j = j + 1
                        
        return final_string
                    
                    
                
                    
            
    
    
        

解决思路:

1.得到最长回文字符串  采用的枚举法
2.分为两种查找,第一种是查找奇数个的回文,第二种查找是偶数个的回文
3.需要注意的是单个字符或者空字符的话返回原字符即可,因为循环语句中有for len(s)-1,只能对大于长度1的字符串进行判断和操作
4.主体思想是定位一个桩点,奇数个的话,围绕这个桩点左右比较是否相等,相等的话就说明已经找到一个,再判断长度是否比以前的字符串长,如果长的话就赋值,没有的话就不做操作,最后再迭代往外扩展,即++;如果不相等的话就break,没有进一步比较的意义了。偶数个的话就只需要和临近的比较,从而往外扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值