LeetCode-5. Longest Palindromic Substring

难受,本来感觉很简单的题,就是想不出不TLE的solution,唉


5.

Longest Palindromic Substring

Example:

Input: “babad”

Output: “bab”

Note: “aba” is also a valid answer.
Example:

Input: “cbbd”

Output: “bb”


一开始只想到个o(n^2)的解,想着肯定会TLE,不过边写边想思路就是了。

class Solution(object):

    def isPal(self,str):
        return str==str[::-1]

    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        ans="";
        for i in range(len(s)):
            for j in range(len(s)+1):
                if j<=i:
                    continue
                if self.isPal(s[i:j]):
                    if len(s[i:j])>len(ans):
                        ans=s[i:j]
        return ans

嘻嘻,python写起来真的舒服,这是唯一舒服的地方
蓝后不出所料的TLE了

Submission Details
78 / 94 test cases passed.
Status: Time Limit Exceeded
Submitted: 41 minutes ago
Last executed input:
“gphyvqruxjmwhonjjrgumxjhfyupajxbjgthzdvrdqmdouuukeaxhjumkmmhdglqrrohydrmbvtuwstgkobyzjjtdtjroqpyusfsbjlusekghtfbdctvgmqzeybnwzlhdnhwzptgkzmujfldoiejmvxnorvbiubfflygrkedyirienybosqzrkbpcfidvkkafftgzwrcitqizelhfsruwmtrgaocjcyxdkovtdennrkmxwpdsxpxuarhgusizmwakrmhdwcgvfljhzcskclgrvvbrkesojyhofwqiwhiupujmkcvlywjtmbncurxxmpdskupyvvweuhbsnanzfioirecfxvmgcpwrpmbhmkdtckhvbxnsbcifhqwjjczfokovpqyjmbywtpaqcfjowxnmtirdsfeujyogbzjnjcmqyzciwjqxxgrxblvqbutqittroqadqlsdzihngpfpjovbkpeveidjpfjktavvwurqrgqdomiibfgqxwybcyovysydxyyymmiuwovnevzsjisdwgkcbsookbarezbhnwyqthcvzyodbcwjptvigcphawzxouixhbpezzirbhvomqhxkfdbokblqmrhhioyqubpyqhjrnwhjxsrodtblqxkhezubprqftrqcyrzwywqrgockioqdmzuqjkpmsyohtlcnesbgzqhkalwixfcgyeqdzhnnlzawrdgskurcxfbekbspupbduxqxjeczpmdvssikbivjhinaopbabrmvscthvoqqbkgekcgyrelxkwoawpbrcbszelnxlyikbulgmlwyffurimlfxurjsbzgddxbgqpcdsuutfiivjbyqzhprdqhahpgenjkbiukurvdwapuewrbehczrtswubthodv”

然后我想着能不能用left和right两个标记和一个for来实现,想了好久没想出来(其实也就想了半小时),于是看了下别人的解,原来是是这样
首先sub=”” //最长的长度的子串
for i in range(len(str)):
以i作为最右的index,然后检测i-len(sub)和i-1-len(sub)是否是palindromic(之所以要-1是因为有可能是奇也可能是偶),然后如果是的话,sub=该子串,最后返回sub
写完上面这段话然后我就去睡觉了,第二天纠结了一天,在想看了别人的思路写出来的不是自己的代码,纠结了好久还是决定实现一遍,反正我也想不出来更好的办法了
于是课上花了十几分钟实现了一下

class Solution(object):

    def isPal(self,str,left,right):#include index left and index right
        if left<0:
            return False
        return str[left:right+1]==str[left:right+1][::-1]

    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        ans=""
        for i in range(len(s)):
            if self.isPal(s,i-len(ans),i):
                ans=s[i-len(ans):i+1]
            if self.isPal(s,i-len(ans)-1,i):
                ans=s[i-len(ans)-1:i+1]
        return ans

一遍Accepted,而且python的语法真心简单粗暴,写起来简直是一种享受,舒服的要死

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值