LeetCode005最长回文子串之动态规划

题目描述:

给你一个字符串 s,找到 s 中最长的回文子串。


解法:动态规划

维基百科:动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。

以该题为例:首先,从示例中可看出该题可能是不唯一解,我们需要从所给的字符串s中,找到满足符合条件的子字符串。简单的说,我们需要遍历字符串s的任意长度的子字符串,再通过条件判断,返回最长的子字符串。

判断过程:


我们通过字符串s对长度建立一个正二维表,使用两个指针,一个指针i从索引1的位置开始锁定,另一个指针j从索引0的位置到一直遍历到第一个指针的位置。令 dp[i][j] 表示 S[i] 至 S[j] 所表示的子串是否是回文子串,是则为 True,不是则为False。这样根据 S[i] 是否等于 S[j] ,可以把转移情况分为两类:

 1.若 S[i] == S[j],那么只要 S[i+1] 至 S[j-1] 是回文子串,S[i] 至 S[j] 就是回文子串;如果S[i+1] 至 S[j-1] 不是回文子串,则 S[i] 至 S[j] 也不是回文子串。

 2.若 S[i] != S[j],那么 S[i] 至 S[j] 一定不是回文子串。

依次进行对比:


源代码:


去试试吧!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容