问题描述:给定一个字符串,找出其中长度最长的回文子串。子串意思是给定字符串的连续子集。回文是指正序和倒序表现形式一样的字符串。
暴力算法是依次以每个点为中心展开并将对应位置的字符进行匹配,找出最长的子串即可。但是时间复杂度很高。这里介绍一种技巧性比较强的Manacher算法,时间复杂度只有O(n)。Manacher算法核心思想就是利用回文子串的对称性,假如某个中心点p包含在一个长的回文子串F中,则以该中心点为中心的回文子串会和以F的中心点为对称轴的另一侧的某个子串有一些共同的特征。利用这个属性就不需要为每个中心点再从1开始展开了。比如对于下面这个例子
abcdcgcdcbe