求一个字符串里的最长回文子串 相当于将字符串倒转 求最长最长公共序列
#include <algorithm> #include <cstring> #include <cstdio> using std::max; char s[1010]; char str[1010]; int n; int dp[1010][1010]; int LCS(int x, int y) { if(x==n || y==n) return 0; if(dp[x][y]!=-1) return dp[x][y]; int ans=0; if(s[x]==str[y]) ans=LCS(x+1,y+1)+1; else { ans=max(LCS(x+1,y),LCS(x,y+1)); } return dp[x][y]=ans; } int main() { int t; scanf("%d",&t); getchar(); while(t--) { gets(s); n=strlen(s); int i=0; for(int j=n-1; j>=0; j--) str[i++]=s[j]; str[i]='\0'; memset(dp, -1, sizeof(dp)); int m=LCS(0,0); printf("%d\n",m); } return 0; }