LeetCode(4) Longest Palindromic Substring

题目


Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

给定一个字符串s,找到s中最长的回文子字符串。你可以假定最大长度是1000

知识点


回文字符串:一个字符串,从左到右读和从右到左读是完全一样的,比如level,abba等

思路


感觉这一题还是挺难的,没有什么想法,所以直接看了一些大牛的博客,整理出来四种解决方案

第一种:蛮力穷举法,时间O(n^3) 空间O(1)

穷举所有子字符串,依次按位判断是否是回文,并更新结果,时间复杂度很高,空间复杂度很低

第二种:动态规划,时间复杂度O(n^3) 空间O(1)

根据回文的特性,一个大的回文,按比例虽小后的字符串也必定是回文,比如BCCB,那么CC肯定也是回文,什么问题可以使用动态规划来解决?1. 大问题拆解为小问题,两个问题解决的事情是一样的,2. 重复利用之前的计算结果

第三种:中心扩散法 ,时间复杂度O(n^3) 空间O(1)

穷举所有的中心点,以中心点向两边扩散来找出最大的字符串,一共有2n-1个中心,为什么不是n个呢?因为偶数个的时候中心就是两个字符,如果abbba,那么中心点分别就是(a,b,b,b,a,ab,bb,bb,ba)

第四种:马拉车算法 Manacher Algorithm 时间复杂度 O(n) 空间 O(n)

Manacher算法是非常经典的计算连续下标回文的算法。它利用了回文的对称性,更具体的来说,是回文内回文的对称性,来解决这个问题。

代码实现


以上方法的代码链接

猜你喜欢

转载自blog.csdn.net/cd18333612683/article/details/79065474