题意:找出一个字符串中的最大回文字串。
思路:如果字符串s中存在一个回文字串,那么它的逆串t中也存在着这个回文字串,那么我们可以求s和t的最大连续公共子串。
代码示例
#include <cstring>
class Solution {
public:
string longestPalindrome(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int dp[1010][1010];
memset(dp, 0, sizeof(dp));
string str = "";
int len = s.size();
for(int i = 0; i < len; ++i)
str += s[len - 1 - i];
int ans = 0, pos;
for(int i = 0; i < len; i++)
{
for(int j = 0; j < len; ++j)
{
if(s[i] == str[j])
{
if(i == 0 || j == 0)
dp[i][j] = 1;
else
dp[i][j] = dp[i - 1][j - 1] + 1;
if(ans <= dp[i][j])
{
ans = dp[i][j];
pos = i;
}
}
}
}
string ch = "";
for(int i = pos - ans + 1; i <= pos; ++i)
ch += s[i];
return ch;
}
};