题目描述:
给你一个字符串 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] 一定不是回文子串。
依次进行对比:
源代码:
去试试吧!