Longest Palindromic Substring

来源:互联网 发布:nba2konline软件刷球星 编辑:程序博客网 时间:2024/05/22 04:55

题目描述:

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

 

大意:返回最长回文字符串

 

解题思路:

         1,动态规划(dp),假如substr(i,len)是最长回文字符串(用一个bool型二维数组来判断表示),那么左右两端向内移动一位,必须同样满足回文字符串的条件。

         2,遍历整个长度,因为你不能确定当前是否最长,直至最后遍历完毕

         3,设定了字符串长度为len,那么这个len必须是1到s.size();len很重要,因为它决定了两者:起始字符串下表i(最大只能为s.size()-len-1),还有当前长度的最后一位下标j(i+len-1)

 

代码部分:

 

 

代码分析:1,起初我不知道为什么len必须从3开始循环,而把len=1,len=2作为基础,就把len=2的情况注释,然后大循环从len=2开始,但是出现错误。现在明白了:动态规划都必须有base,基础情况,所有问题都必须能一步步分割到最后,也就是分割到base,和斐波那契数列一样(当前数值等于前两者之和,所以必须有n=1,n=2),最长字符串长度不知奇偶性,所以分割到最后,不知道是否为一个char(奇数)或者两个char(偶数),例如abb,分割到最后应该是s[1]=s[2];又例如aba,分割到最后,应该是s[1]=s[1].

        2,另外一个问题是大循环里面的一个判断条件,s[i]==s[j]&&table[i+1][j-1],想着第二个table的条件是否能换为s[i+1]==s[j-1],答案是否定的。因为table的含义是ij之内的字符串为回文,而不是单独判断两端的元素。

0 0
原创粉丝点击