#include <stdio.h>#include <string.h>#include <algorithm>int dp[1005][1005];int main(){ using namespace std; int n; char str1[1005],str2[1005]; int len_1,len_2; scanf("%d",&n); while(n--) { memset(dp,0,sizeof(dp)); scanf("%s%s",str1,str2); len_1 = strlen(str1); len_2 = strlen(str2); for(int i=1;i <= len_1; i++) { for(int j=1; j <= len_2; j++) { if(str1[i-1] == str2[j-1]) { dp[i][j] = dp[i-1][j-1]+1; } else { dp[i][j] = max(dp[i][j-1] , dp[i-1][j]); } } } printf("%d\n",dp[len_1][len_2]); } return 0;}
思路:当str_1[i] == str_2[j]时 ,dp[i][j] = dp[i-1][j-1] + 1; 因为既然它们相等了,所以只要之前的LCS+1就行了。 当str_1[i] != str_2[j]时,要取str_1[i]和str_2[j-1] 与 str_1[i-1]和str_[j] 的最大LCS。