2799522_ac_0ms_124k.c

来自「北大大牛代码 1240道题的原代码 超级权威」· C语言 代码 · 共 61 行

C
61
字号
#include <stdio.h>
#include <string.h>

char a[101][31], b[101][31];
int na, nb, n;
int dp[101][101];
char ans[101][31];

void lcs()
{
	int i, j;

	memset(dp,0,sizeof(dp));
	for(i = 1; i <= na; i++)
		for(j = 1; j <= nb; j++)
			if(strcmp(a[i-1],b[j-1])==0)
				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];
	n = 0;
	i = na;j = nb;
	while(dp[i][j])
	{
		if(strcmp(a[i-1],b[j-1])==0)
		{
			strcpy(ans[n++],a[i-1]);
			i--,j--;
		}
		else
			if(dp[i-1][j]>dp[i][j-1])
				i--;
			else
				j--;
	}
	for(i = n-1; i >= 0; i--)
		printf("%s ",ans[i]);
	printf("\n");
}

int main()
{
	while(scanf("%s",a[0])==1)
	{
		na = 1;
		while(scanf("%s",a[na])==1)
		{
			if(a[na][0]=='#')
				break;
			na++;
		}
		nb = 0;
		while(scanf("%s",b[nb])==1)
		{
			if(b[nb][0]=='#')
				break;
			nb++;
		}
		lcs();
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?