題目鏈接 http://www.bianchengla.com/oj/par/practise/problem?id=1066
受一位牛神啓發,利用兩個一維數組替換二維數組,數組滾動後移,從而實現節省空間的目的。
#define MAXN 1000+5
#include <stdio.h>
#include <string.h>
char str1[MAXN],str2[MAXN];
int cnt1[MAXN],cnt2[MAXN];
void solve()
{
int l1,l2,i,j,k;
scanf("%s",&str1);scanf("%s",&str2);
l1=strlen(str1);l2=strlen(str2);
for(i=1;i<=l1;i++) cnt1[i]=0;
for(i=1;i<=l2;i++) cnt2[i]=0;
for(i=1;i<=l1;i++){
for(j=1;j<=l2;j++)
{
if(str1[i-1]==str2[j-1]) cnt1[j]=cnt2[j-1]+1;
else cnt1[j]=cnt1[j-1]>cnt2[j]?cnt1[j-1]:cnt2[j];
}
for(k=1;k<=l2;k++) cnt2[k]=cnt1[k];
}
printf("%d\n",cnt2[l2]);
}
int main()
{
int _;scanf("%d",&_);
while(_--) solve();
return 0;
}