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