求最长回文字符串常用的算法

1. 最长回文串的定义

1、回文串是指正读和反读都一样的字符串;
如:

level
noon

2、最长回文串:即给定一组字符串,求其最长回文串的长度;
如:

给定:azbcbac
最长回文串:abcba

2. Brute-force(暴力破解算法)

1、原理:列举字符串中的所有子串,并判断它们是否为回文串;
2、时间复杂度:O(n^3);
长度为n的字符串共有n^2个子串,而子串的平均长度为n/2。

插入一个常用算法的时间复杂度和空间复杂度的表:

排序法 平均时间 最差情况 稳定度 额外空间 备注
冒泡 O(n^2) O(n^2) 稳定 O(1) 适合n较小时
交换 O(n^2) O(n^2) 不稳定 O(1) 适合n较小时
选择 O(n^2) O(n^2) 不稳定 O(1) 适合n较小时
插入 O(n^2) O(n^2) 稳定 O(1) 适合大部分已排好序
基数 O(log(B,R)) O(log(B,R)) 稳定 O(n) 适合B是真数,R是基数
Shell O(nlogn) O(n^s), 1<s<2 不稳定 O(1) s是指所选分组
快速 O(nlogn) O(n^2) 不稳定 O(nlogn) 适合n较大时
归并 O(nlogn) O(nlogn) 稳定 O(1) 适合n较大时
O(nlogn) O(nlogn) 不稳定 O(1) 适合n较大时

时间复杂度从小到大:
O(1) < O(log(n,2)) < O(n) < O(nlog(n,2)) < O(n^2) < O(n ^3) < O(2 ^n) < O(n!)

O(1), O(log(n,2)), O(n), O(nlog(n,2)) 这几个算法的时间效率算比较高;但是像O(2^n), O(3 ^n),如果n稍微大一点就崩了。

空间复杂度:是指这段代码运行过程中所占用的储存空间大小;储存空间包括3个方面 - 代码本身所占的空间、输入输出数据所占用的空间、运行过程中所占用的空间。

3. Manacher 算法

算法基础原理:利用回文串的对称性,也就是任何回文串都有其对称轴;如果回文串长度为偶数,则对称轴是中间两个字符的空隙;如果回文串长度为奇数,则对称轴是中间那个字符。遍历所有有可能为对称轴的位置,同时往左往右延伸,一旦发现字符不同则马上停止。

<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值