第五题是求字符串里的最大回文子串,回文串(Palindromic Substring)就是例如”aba”,“abba”这种,网上有很多使用解决方法,比如使用动归,kmp的变种等解法,时间复杂度从O(n^3)甚至到O(n)。
我这里的结题思路是,对字符串里的每一个字符向两边展开,字符串长度增加的条件如下:
如果s[end] == s[end+1],end++,长度加1
如果s[begin-1] == s[end +1], begin–且end++,长度加2
注意循环过程中end小于len(s)-1,begin大于0
代码如下:
#! /usr/bin/env python
# -*- coding -*-
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
length = len(s)
max_len = 0
index = 0
if length == 0 or length == 1:
return s
for i in range(0, length):
begin = i
end = i
while end < length - 1 and s[end] == s[end+1]:
end = end + 1
while end < length - 1 and begin > 0 and s[begin - 1] == s[end + 1]:
begin = begin - 1
end = end + 1
if max_len < end - begin + 1:
max_len = end - begin + 1
index = begin
return s[index:index + max_len]
if __name__ == "__main__":
s = Solution();
print s.longestPalindrome('aabcbcbaacbeeeeeeeeebc')
因为使用了两层循环,所以时间复杂度是O(n),网上也有同学做到了复杂度为O(n),我赶紧去膜拜学习一下。