Longest Palindromic Substring(最长的回文子串)
题目描述:
给定一个字符串,找到字符串中的最长回文子串。见LeetCode5
解题思路:
本题的常见解法有三种。第一种是中心扩展的方法。在遍历字符串的过程,以当前字符串为中心向左右两侧扩展,扩展结束后判断子串的长度。需要注意的是:这种方法中有偶回文串和奇数回文串的区别,遍历的过程需要区别对待。aba奇回文子串,abba是偶回文子串。
代码如下:
|
|
解题思路2:
第二种思路是使用动态规划的方法。我们用P[i, j]表示字符串中i到j位置的子串;如果这个串是回文字符串则我们设定为1;如果这个子串不是回文字符串我们则设定为0。这样我们构建一个二维的数组用来保存是否是回文的信息;然后根据一下三种情况来进行修改数组中的信息。
- 如果i = j的情况,则P[i,j]设定为1;
- 如果j = i + 1情况,则判断s[i]和s[j]是否相等;相等为1否则为1;
- 如果j > i + 1的情况,我们先判断s[i]和s[j]的情况,不相等则设定为1;如果相等的情况下则P[i,j] = P[i+1,j-1]
需要注意的地方是,我们则判断P[i, j]的时候用的是P[i + 1, j - 1]的情况,所以我们需要先知道P[i + 1,j - 1]的情况,这样决定了我们i需要从末尾开始遍历开始,然后j从i位置遍历到字符串的末尾。
|
|