关于求最大回文字符串(两种不同算法)的一些个人记录

1.Manacher算法
最经典的,可将穷举方法下时间复杂度O(n³)一举减少为O(n)。
大概的思路就是 在原来设第i个字符串对应的回文半径为p[i],以p[i]=1(最小值)为起点,逐渐累加扩展的基础上,增加一个判断-->是否可以将当前字符回文半径的初始值设置为更大的整数。

但是要注意是要求你求最大回文字符串还是其所对应的长度,前者比后者要多设置两个变量(某些版本)。

2.动态规划
时间复杂度为O(n²)实现代码的长度大概是最短的,
idea:我们维护一个二维数组dp,其中dp[i]表示字符串区间[i, j]是否为回文串,当i = j时,只有一个字符,肯定是回文串,如果i = j + 1,说明是相邻字符,此时需要判断s[i]是否等于s[j],如果i和j不相邻,即i - j >= 2时,除了判断s[i]和s[j]相等之外,dp[j+1][i-1]若为真,就是回文串。

另外要注意嵌套的内循环中应该是dp[j][i]而不是dp[i][j]!

注释

引用来源:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值