python写算法题:leetcode: 5. Longest Palindromic Substring
2017-06-02 08:52
671 查看
https://leetcode.com/problems/longest-palindromic-substring/#/description
class Solution(object):
def palindrome(self, s, centpos):
ind0=0
while True:
if centpos-ind0<0 or centpos+ind0>=len(s): break
if s[centpos+ind0]!=s[centpos-ind0]:break
ind0+=1
ind1=0
while True:
if centpos-ind1<0 or centpos+ind1+1>=len(s): break
if s[centpos+ind1+1]!=s[centpos-ind1]:break
ind1+=1
#print "got:",s, centpos, ind0, ind1
if ind0*2-1 > ind1*2:
return s[centpos-ind0+1:centpos+ind0]
else:
return s[centpos-ind1+1:centpos+ind1+1]
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s)<2: return s
shalflen = len(s)/2
maxlen=0
maxret=""
for ind in xrange(shalflen+1):
if maxlen/2>shalflen-ind: break
ret=self.palindrome(s,shalflen-ind)
ret1=""
if ind>0:
ret1=self.palindrome(s,shalflen+ind)
if len(ret)>maxlen:
maxlen = len(ret)
maxret=ret
if len(ret1)>maxlen:
maxlen = len(ret1)
maxret=ret1
return maxret
思路:从字符串中间的位置开始找起,避免不必要的检查
class Solution(object):
def palindrome(self, s, centpos):
ind0=0
while True:
if centpos-ind0<0 or centpos+ind0>=len(s): break
if s[centpos+ind0]!=s[centpos-ind0]:break
ind0+=1
ind1=0
while True:
if centpos-ind1<0 or centpos+ind1+1>=len(s): break
if s[centpos+ind1+1]!=s[centpos-ind1]:break
ind1+=1
#print "got:",s, centpos, ind0, ind1
if ind0*2-1 > ind1*2:
return s[centpos-ind0+1:centpos+ind0]
else:
return s[centpos-ind1+1:centpos+ind1+1]
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s)<2: return s
shalflen = len(s)/2
maxlen=0
maxret=""
for ind in xrange(shalflen+1):
if maxlen/2>shalflen-ind: break
ret=self.palindrome(s,shalflen-ind)
ret1=""
if ind>0:
ret1=self.palindrome(s,shalflen+ind)
if len(ret)>maxlen:
maxlen = len(ret)
maxret=ret
if len(ret1)>maxlen:
maxlen = len(ret1)
maxret=ret1
return maxret
思路:从字符串中间的位置开始找起,避免不必要的检查
相关文章推荐
- Longest Palindromic Substring[leetcode] O(n^2)的DP和O(n)的算法
- leetcode Longest Palindromic Substring python
- LeetCode 5 Longest Palindromic Substring(最长回文子串,暴力剪枝/DP/曼彻斯特算法)
- Longest Palindromic Substring (最长回文串)【面试算法leetcode】
- LeetCode 5.Longest Palindromic Substring (Python)兼翻译
- LeetCode 5 Longest Palindromic Substring(C,C++,Python,Java)
- leetcode python - Longest Palindromic Substring
- 算法分析与设计——LeetCode Problem.5 Longest Palindromic Substring
- LeetCode算法问题4 —— Longest Palindromic Substring
- [LeetCode]5 Longest Palindromic Substring(C++,Python实现)
- leetcode-05- Longest Palindromic Substring-python
- Leetcode_longest-palindromic-substring(c++ and python version)
- 每周LeetCode算法题(二):Longest Palindromic Substring
- leetcode Longest Palindromic Substring 时间复杂度问o(n)的算法
- 【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】
- leetcode 5 Longest Palindromic Substring(Manacher算法求最长回文串)
- Longest Palindromic Substring Leetcode Python Java
- [LeetCode]Longest Palindromic Substring@python
- python学习——leetcode第五题 Longest Palindromic Substring
- 【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】