果的LCS,输入有trick,可能遇到空格,不能用scanf,当然,正则表达式也行
#include <stdio.h>
#include <string.h>
char str1[1010], str2[1010];
int data[1010][1010];
int max(int a, int b)
{
return a>b?a:b;
}
int LCS()
{
int len1= strlen(str1)-1, len2= strlen(str2)-1;
int i, j;
for ( i = max(len1, len2) ; i >= 0 ; i-- )
data[i][0]= data[0][i]= 0;
for ( i = 1 ; i <= len1 ; i++ )
for ( j = 1 ; j <= len2 ; j++ )
if ( str1[i-1] == str2[j-1] )
data[i][j]= data[i-1][j-1]+1;
else
data[i][j]= max(data[i-1][j], data[i][j-1]);
return data[len1][len2];
}
int main()
{
while ( NULL != fgets(str1, sizeof(str1), stdin) )
{
fgets(str2, sizeof(str2), stdin);
printf("%d\n", LCS());
}
return 0;
}
PS:fgets会把\n也读进来