您的位置:首页 > 其它

动态规划解回文

2016-01-31 15:49 302 查看
class Solution {
public:
string longestPalindrome(string s) {
int len = s.length();
int max_length = 0;
int begin_index = 0;
// table[i][j] 表示从i到j的字符串是否为回文
bool table[1001][1001] = {false};

for (int i = 0; i < len; ++i)
{
table[i][i] = true;
max_length = 1;
begin_index = i;
}

for (int i = 0; i < len - 1; ++i)// 计算长度为2的子串是否为回文
{
if (s[i] == s[i+1])
{
table[i][i+1] = true;
max_length = 2;
begin_index = i;
}
}

for (unsigned int l = 3; l <= len; ++l)// 回文子串的长度
{
for (unsigned int start = 0; start < len - l + 1; ++start)// 子串的起始位置
{
int end = l + start - 1;// 子串的结束位置
if (table[start+1][end-1] && s[start] == s[end])
{
table[start][end] = true;
if (l > max_length)
{
max_length = l;
begin_index = start;
}
}
}
}

return string(s, begin_index, max_length);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: