您的位置:首页 > 职场人生

算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人

2016-06-22 14:21 495 查看


这是一个典型的动态规划题,属于求两个字符串的最长公共子串问题,如果你手边有《算法导论》这本书,这个问题就可以在书中找到;

Code:

int LCS(const char *Male,const char *Female)
{
int N = (int)strlen(Male);
int M = (int)strlen(Female);
int pair[1001][1001];//配对结果矩阵
//初始化
for (int i = 0; i < N; i ++)
{
pair[i][0] = 0;
}
for (int i = 0; i < M; i ++)
{
pair[0][i] = 0;
}

for (int i = 1; i <= N; i ++)
{
for (int j = 1; j <= M; j ++)
{
if (Male[i-1] == Female[j-1])
pair[i][j] = pair[i-1][j-1] + 1;
else
{
if (pair[i-1][j] > pair[i][j-1])
pair[i][j] = pair[i-1][j];
else
pair[i][j]=pair[i][j-1];
}
}
}

return pair
[M];
}


int  main()
{
const char Male[1001];
const char Female[1001];
scanf("%s\r\n%s",Male,Female);
printf("%d",LCS(Male,Female));
return 0;
}


result:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: