求最长回文子串(Longest Palindromic Substring)

本文介绍了如何解决最长回文子串问题,包括动态规划法和中心扩展法,详细解析了这两种方法的思路和代码实现,时间复杂度均为O(n^2)。
摘要由CSDN通过智能技术生成

     求解最长回文子串的问题最近经常遇到,特别是近期的笔试,因而有了一个学习的契机。先说说回文字符串,回文字符串的意思是从左往右看和从右往左看都是一样的,即我们如果以中心为轴,这个字符串是左右对称的,如字符串"abcba","abba"。字符串"abcba"有奇数个字符,所以以中间字符'c'为轴左右对称,而字符串"abba"有偶数个字符,所以是对半开来对称的。而顾名思义,最长回文子串就是指一个字符串中最长的具有回文性质的子串了。

    用暴力的方法是不现实的,一个字符串的子串个数很多(用2个for循环求解,i : 0-n-1,j : i- n-1),有n * (n+1) / 2个,如果对所有子串都进行回文判断,需要O(n3),显然耗时巨大。

    常规的求解方法有2种:动态规划法,中心扩展判断法,这2种算法都是O(n2)的时间复杂度。

  1. 动态规划法

      假设dp[ i ][ j ]的值为true,表示字符串s中下标从 i 到 j 的字符组成的子串是回文串。那么可以推出:

    dp[ i ]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值