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"的情况.