题目链接: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; }