jsp判断字符串相等_最长回文字符串三种解法

e468dabb40cb00d6a03a5fcc5e571b41.png

先解释一下什么是回文字符串,比如说字符串“aba”,无论是从先往后读取还是从后往前读取,结果都是一样的。当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算法面试题,那么这里给出三种解法。

  • 1.暴力穷举法思路:即遍历每种子字符串,然后判断该子字符串是否为回文(即前半部分是否等于后半部分),时间复杂度为O(n*n*n)
6b45bb2715fa9b547e8b0dbc03783c1d.png

暴力穷举

  • 2.中间扩散法

从每一个位置出发,向两边扩散即可。遇到不是回文的时候结束。

1.首先往左寻找与当期位置相同的字符,直到遇到不相等为止。

2.然后往右寻找与当前位置相同的字符,直到遇到不相等为止。

3.最后左右双向扩散,直到左和右不相等。如下图所示:

734a4e4d0fd59453dbb8ec0ea200d678.png
23bdc22bf64f88fa8109e1be63c3a6b1.png

中间扩散法

3.动态规划法

一开始我刚听到动态规划这个词的时候感觉很高大上,后来经过查找资料发现其实很简单,只不是从下向上的计算,说白了就是空间换时间,把中间的计算结果暂存起来,避免重复计算;

思路:

1.我们用一个 boolean dp[i][j]表示字符串从 i 到 j 这段是否为回文。

2.试想如果dp[i][j]=true,我们要判断 dp[i-1][j+1]是否为回文。

只需要判断字符串在(l-1)和(r+1)两个位置是否为相同的字符,是不是减少了很多重复计算。动态规划关键是找到初始状态和状态转移方程。

初始状态,l=r 时,此时 dp[l][r]=true。

状态转移方程,dp[l][r]=true 并且(l-1)和(r+1)两个位置为相同的字符,此时 dp[l-1][r+1]=true。

292c8d9414f960fb6669237ec46b2be8.png

动态规划法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值