最长回文子串 leetcode 05 DP解法

找出最长回文子串,马上想到了用DP,用 dp[ i ][ j ] = 1表示s[ i ]----s[ j ]是一个回文串  dp[ i ][ j ] = 0就表示s[ i ]---[ j ]为非回文,方程可以表示为 
 if(s[ i ]==s[ j ])  dp[ i ][ j ] = dp[ i+1 ][ j-1 ],其实也可以明确为,前一个子串是回文串的,当前才继续做判断,否则直接不管,可以细化为 
 if(s[ i ]==s[ j ] && dp[ i+1 ][ j-1 ] == 1)  dp[ i ][ j ] = 1; 之后记录此时的长度和起点,下面是代码
class Solution {
public:
    string longestPalindrome(string s) {
       int judge[1000][1000] = {0};
	   int start = 0;
	   int maxLength = 1;
	   for(int i=0;i
跟之前java不同的是,C++的字符串可以直接取下标,方便了不少,还有substr函数,参数分别是起点和长度,而不是起点和终点的下标。DP开始之前,可以先做初始化,因为每个字符自己本身是一个长度为1的回文串,还有i到i+1长度为2的子串要是是回文串的话必须是两个一样的字符,做完初始化之后可以开始做DP。时间复杂度为O(N^2),略慢,之后再研究一下传说中复杂度为O(N)的好方法。

你可能感兴趣的:(LeetCode,JAVA之路,leetcode,c++,string,最长回文子串,Longest,Palindromic)