最長公共子序列

#include<stdio.h>
#include<string>
using namespace std;
int max(int a, int b)
{
	return a > b ? a : b;
}
int dp[101][101];
char s1[101];
char s2[101];
int main()
{
	while (scanf("%s%s", s1, s2) != EOF)
	{
		int L1 = strlen(s1);
		int L2 = strlen(s2);
		for (int i = 0; i <= L1; i++)
			dp[i][0] = 0;
		for (int i = 0; i <= L2; i++)
			dp[0][i] = 0;
		for (int i = 1; i <= L1; i++)
		{
			for (int j = 1; j <= L2; j++)
			{
				if (s1[i-1] == s2[j-1])
					dp[i][j] = dp[i - 1][j - 1] + 1;
				else
					dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
			}
		}
		printf("%d\n", dp[L1][L2]);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章