我哪里有问题啊,请大家批评指正<敬礼>
int dp[1000][1000]; //dp[i][j]表示到s1的第i位字符和s2的第j位字符为止,两者之间的公有子序列的最大程度
int longestcommon(char *s1,char *s2) //判断s1和s2的公有子序列的最大长度
{
int n=strlen(s1);
int m=strlen(s2);
int i,j;
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
int temp=(s1[i]==s2[j]? 1:0);
if(i==0&&j==0)
dp[i][j]=temp;
else if(i==0)
dp[i][j]=dp[i][j-1]||temp;
else if(j==0)
dp[i][j]=dp[i-1][j]||temp;
else if(temp)
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=(dp[i-1][j]>dp[i][j-1]? dp[i-1][j]:dp[i][j-1]);
}
}
return dp[n-1][m-1];
}
int longestPalindromeSubseq(char* s) {
int n=strlen(s),i;
char s3[1001];
for(i=0;i<n;i++) //实现s的逆字符串
s3[i]=s[n-1-i];
return longestcommon(s,s3);
}