LeetCode-5. Longest Palindromic Substring

来源:互联网 发布:鲨鱼01总决赛数据 编辑:程序博客网 时间:2024/05/05 20:20

难受,本来感觉很简单的题,就是想不出不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的语法真心简单粗暴,写起来简直是一种享受,舒服的要死

0 0