输出字符串中的最长回文子串
示例:
输入:"acbbc" ,输出:"cbbc"
输入:"a",输出:"a"
Python解决方案1:
设置滑动窗口,逐渐减小滑动窗口的大小
def longestPalindrome(s): if len(s) <= 1: return s sub_len = len(s) while sub_len > 1: for i in range(len(s)-sub_len+1): sub_s = s[i:i+sub_len] if s[i] == s[i+sub_len-1] and sub_s == sub_s[::-1]: return sub_s sub_len -= 1 return s[0]
Python解决方案2:
从中间开始,分别向两边搜索回文序列
def longestPalindrome(s): if len(s) <= 1: return s s = "*" + "*".join(s) +"*" mid = len(s) // 2 longest = "" left_mid = mid right_mid = mid while len(longest) < 2*left_mid+1: start_left = left_mid end_left = left_mid while start_left >=0 and s[start_left] == s[end_left]: start_left -= 1 end_left += 1 if end_left-start_left-1 > len(longest): longest = s[start_left+1:end_left] if right_mid != left_mid: start_right = right_mid end_right = right_mid while end_right < len(s) and s[start_right]==s[end_right]: start_right -= 1 end_right += 1 if end_right - start_right - 1 > len(longest): longest = s[start_right+1:end_right] left_mid -= 1 right_mid += 1 out = longest.replace("*","") return out
第二种方案运行效率更高