dp问题,相对于两个字符串的比较,三个字符串,只是加了一层循环。
#include <iostream>
#include <string>
#include <cstdio>
#include <memory.h>
using namespace std;
const int maxn = 102;
char str1[maxn],str2[maxn],str3[maxn];
int dp[maxn][maxn][maxn];
int main()
{
while(scanf("%s",str1 + 1) != EOF){
scanf("%s %s",str2 + 1,str3 + 1);
memset(dp,0,sizeof(dp));
int len1 = strlen(str1 + 1);
int len2 = strlen(str2 + 1);
int len3 = strlen(str3 + 1);
for(int i = 1;i <= len1;i ++)
for(int j = 1;j <= len2;j ++)
for(int k = 1;k <= len3;k ++){
if(str1[i] == str2[j] && str2[j] == str3[k])
dp[i][j][k] = dp[i - 1][j - 1][k - 1] + 1;
else{
int temp1 = dp[i-1][j][k];
int temp2 = dp[i][j-1][k];
int temp3 = dp[i][j][k-1];
dp[i][j][k] = max(max(temp1,temp2),temp3);
}
}
printf("%d\n",dp[len1][len2][len3]);
}
return 0;
}