#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getlastPos(char *s,char c,int pos)
{
int len=strlen(s),i;
for(i=pos-1;i>=0;i--)
{
if(c==s[i])
return i;
}
return i;
}
int** initM(char *x,char *y)
{
int xlen=strlen(x);
int ylen=strlen(y);
int i,j;
//m[i][0]:根据x[i]之后的字符进行DP,在保证x[i]开头子串最长的情况下,存储x中第i个字符在y中最后出现的位置
//m[i][1]:以x中第i个字符开头的最大子公共序列长度
//m[i][2]:以x[i]开头的最长子串下一个字符位置
int **m=(int **)malloc(xlen*sizeof(int*));
for(i=0;i<xlen;i++)
{
m[i]=(int*)malloc(3*sizeof(int));
}
for(i=0;i<xlen;i++)
{
m[i][0]=m[i][1]=0;
m[i][2]=xlen;
}
for(i=xlen-1;i>=0;i--)
{
m[i][0]=getlastPos(y,x[i],ylen);
if(m[i][0]!=-1)
m[i
算法导论 最长公共子序列(按自己思路写的)
最新推荐文章于 2024-12-14 16:38:12 发布
