首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

四种方法求最长回文串

所谓回文串,就是正着读和倒着读结果都一样的回文字符串。

比如:

a, aba, abccba都是回文串,

ab, abb, abca都不是回文串。

一、暴力法

最容易想到的就是暴力破解,求出每一个子串,之后判断是不是回文,找到最长的那个。

求每一个子串时间复杂度O(N^2),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(N^3)。

运行结果:

二、动态规划

设状态dp[j][i]表示索引j到索引i的子串是否是回文串。则转移方程为:

1.png

则dp[j][i]为true时表示索引j到索引i形成的子串为回文子串,且子串起点索引为j,长度为j+i-1。

算法时间复杂度为O(N ^ 2)。

三、中心扩展法

中心扩展就是把给定的字符串的每一个字母当做中心,向两边扩展,这样来找最长的子回文串。算法复杂度为O(N^2)。

需要考虑两种情况:

长度为奇数的回文串,比如a, aba, abcba

长度为偶数的回文串,比如aa, abba

四、Manacher算法

Manacher算法的时间复杂度为O(N),具体可参考:

https://www.cnblogs.com/grandyang/p/4475985.html

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180305G1H0U500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券