Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"

1:

最笨的方法,逐个字符位中心求最长回文子序列,分子序列为奇数和子序列为偶数两种情况,得到最长。

//子序列为奇数 
void jus1(string &s, int n, string &str){
	int i=1,j=1;
    for(; n-i > -1 && n+i < s.size(); ++i ){
    	if(s[n-i] == s[n+i])
    		j+=2;
    	else
    		break;
	}
	if(j>str.size())
		str=s.substr(n - j/2 , j );
}
//子序列为偶数 
void jus2(string &s, int n, string &str){
    int i=0,j=0;
    for( ; n-i>-1 && n+i < s.size(); ++i ){
    	if(s[n-i] == s[n+i+1])
    		j+=2;
    	else 
    		break;
	}
	if(j>str.size())
		str=s.substr(n- j/2 + 1, j );
    
}

string longestPalindrome(string s){
	string res;
	for(int i=0;i<s.size();++i){
		//以s[i]为中心进行搜索 
		jus1(s,i,res);
		jus2(s,i,res);
	}
	return res;
}

2:

以前做过类似的题,有个规律 子序列的题普遍都是用动态规划去做。然后就想通过将序列反转后转化为求最长公共子串(LCS)来求,结果不对,忽略了首尾"aacdefcaa"的情况.