#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Getdp(int **dp, char str1[], int len1, char str2[], int len2);
void main()
{
int i,j;
char str1[] = "abcdefg";
char str2[] = "abcdgefgcdefg";
int len1 = strlen(str1);
int len2 = strlen(str2);
char *ComSubStr;
int maxdp, index;
// 定义二级指针并申请内存空间,存放dp矩阵
int **dp = (int **)malloc(sizeof(int)*len1);
for(j=0; j<len2; j++)
dp[j] = (int *)malloc(sizeof(int)*len2);
Getdp(dp, str1, len1, str2, len2);
printf("the matrix of dp is as follow : \n");
for(i=0; i<len1; i++)
{
for(j=0; j<len2; j++)
printf("%d ", dp[i][j]);
printf("\n");
}
// 获取dp矩阵元素的最大值及其对应的下标
maxdp=dp[0][0], index=0;
for(i=0; i<len1; i++)
{
for(j=0; j<len2; j++)
{
if(dp[i][j]>maxdp)
{
maxdp = dp[i][j]; // dp矩阵的最大元素值
index = i; // 最大元素值所对应的下标
}
}
}
// 根据dp的含义知,最长公共子串长度为maxdp,也即str1或str2中连续的maxdp个字符
// 也即str1[index-maxdp ... index]
ComSubStr = (char *)malloc(sizeof(char)*maxdp+1);
memset(ComSubStr, 0, (sizeof(char)*maxdp+1)); // 初始化刚申请的内存单元
for(i=maxdp-1; i>=0; i--)
ComSubStr[i] = str1[index--];
printf("the longest common substring is : %s\n", ComSubStr);
}
// 获取dp矩阵
// dp[i][j]表示必须以str1[i]和str2[j]结尾的最长公共子串的长度
// 如果str1[i]==str2[j],则dp[i][j]=dp[i-1][j-1]+1
// 如果str1[i]!=str2[j],则dp[i][j]=0
void Getdp(int **dp, char str1[], int len1, char str2[], int len2)
{
int i, j;
for(i=0; i<len1; i++)
dp[i][0] = str1[i]==str2[0] ? 1 : 0;
for(j=0; j<len2; j++)
dp[0][j] = str2[j]==str1[0] ? 1 : 0;
for(i=1; i<len1; i++)
for(j=1; j<len2; j++)
dp[i][j] = str1[i]==str2[j] ? dp[i-1][j-1]+1 : 0;
}
//void GetComStr(char *ComSubStr, char str1[], int len1, char str2[], int len2)
//{
// int i,j;
// int maxdp, index;
// // 定义二级指针并申请内存空间,存放dp矩阵
// int **dp = (int **)malloc(sizeof(int)*len1);
// for(j=0; j<len2; j++)
// dp[j] = (int *)malloc(sizeof(int)*len2);
// Getdp(dp, str1, len1, str2, len2);
// //printf("the matrix of dp is as follow : \n");
// //for(i=0; i<len1; i++)
// //{
// // for(j=0; j<len2; j++)
// // printf("%d ", dp[i][j]);
// // printf("\n");
// //}
//
// // 获取dp矩阵元素的最大值及其对应的下标
// maxdp=dp[0][0], index=0;
// for(i=0; i<len1; i++)
// {
// for(j=0; j<len2; j++)
// {
// if(dp[i][j]>maxdp)
// {
// maxdp = dp[i][j]; // dp矩阵的最大元素值
// index = i; // 最大元素值所对应的下标
// }
// }
// }
// // 根据dp的含义知,最长公共子串长度为maxdp,也即str1或str2中连续的maxdp个字符
// // 也即str1[index-maxdp ... index]
// ComSubStr = (char *)malloc(sizeof(char)*maxdp+1);
// memset(ComSubStr, 0, (sizeof(char)*maxdp+1)); // 初始化刚申请的内存单元
// for(i=maxdp-1; i>=0; i--)
// ComSubStr[i] = str1[index--];
// //printf("the longest common substring is : %s\n", ComSubStr);
//}
没有合适的资源?快使用搜索试试~ 我知道了~
C语言经典动态规划问题
共46个文件
tlog:19个
c:6个
manifest:2个
需积分: 45 23 下载量 162 浏览量
2015-12-14
11:15:57
上传
评论 1
收藏 766KB RAR 举报
温馨提示
最长递增公共子序列、最长公共子串、最小编辑代价等经典动态规划问题的详细代码
资源推荐
资源详情
资源评论
收起资源包目录
MaxLengthCommonSubString.rar (46个子文件)
MaxLengthCommonSubString
MaxLengthCommonSubString.sln 939B
MaxLengthCommonSubString
LongestCommonSubString.c 3KB
StringFilter.cpp 763B
MaxLengthCommonSubString.c 2KB
LongestIncreaseSubSequence.c 1KB
MaxLengthCommonSubString.vcxproj.filters 2KB
MaxLengthCommonSubString.vcxproj.user 143B
DeleteSameCharacter.c 920B
MinEditCost.c 2KB
LongestRepeatSubString.cpp 1KB
LongestCommonSubSqueuece.c 2KB
Debug
vc100.idb 27KB
CL.write.1.tlog 560B
CL.read.1.tlog 1KB
mt.read.1.tlog 254B
rc.write.1.tlog 470B
rc.read.1.tlog 462B
link.3232.read.1.tlog 2B
MaxLengthCommonSubString.exe.intermediate.manifest 381B
mt.command.1.tlog 538B
cl.command.1.tlog 818B
link-cvtres.read.1.tlog 2B
link.3232-cvtres.read.1.tlog 2B
MaxLengthCommonSubString_manifest.rc 238B
link.write.1.tlog 1KB
MaxLengthCommonSubString.exe.embed.manifest.res 472B
MaxLengthCommonSubString.log 3KB
LongestCommonSubString.obj 7KB
link-cvtres.write.1.tlog 2B
link.3232-cvtres.write.1.tlog 2B
link.command.1.tlog 2KB
rc.command.1.tlog 802B
link.read.1.tlog 4KB
link.3232.write.1.tlog 2B
MaxLengthCommonSubString.lastbuildstate 69B
mt.write.1.tlog 490B
MaxLengthCommonSubString.write.1.tlog 0B
MaxLengthCommonSubString.exe.embed.manifest 406B
vc100.pdb 52KB
MaxLengthCommonSubString.vcxproj 5KB
MaxLengthCommonSubString.suo 29KB
ipch
maxlengthcommonsubstring-90ff82c1
maxlengthcommonsubstring-1f6ae25e.ipch 2.25MB
Debug
MaxLengthCommonSubString.exe 29KB
MaxLengthCommonSubString.ilk 301KB
MaxLengthCommonSubString.pdb 355KB
MaxLengthCommonSubString.sdf 1.89MB
共 46 条
- 1
资源评论
tianyunzqs
- 粉丝: 28
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功