题目链接:http://hihocoder.com/problemset/problem/1032

 

#include <bits/stdc++.h>
using namespace std;

bool table[10000][10000] = {false};

string longestPalindromeDP(string s)
{
    int n = s.length();
    int longestBegin = 0;
    int maxLen = 1;
    memset(table,0,sizeof(table));
    for (int i = 0; i < n; i++)
        table[i][i] = true;   //前期的初始化


    for (int len = 2; len <= n; len++)
    {
        for (int i = 0; i < n-len+1; i++)
        {
            int j = i+len-1;
            if (s[i] == s[j] && table[i+1][j-1])
            {
                table[i][j] = true;
                longestBegin = i;
                maxLen = len;
            }
        }
    }
    return s.substr(longestBegin, maxLen);
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        string str;
        cin>>str;
        string ans = longestPalindromeDP(str);
        cout<<ans.length()<<endl;
    }
    return 0;
}
View Code

相关文章: