#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);
//}
tianyunzqs
- 粉丝: 28
- 资源: 12
最新资源
- 多目标粒子群算法MOPSO:求解含风电场的电力系统动态经济环境调度问题,考虑机组爬坡约束,旋转备用,阀点效应 附带相关文献
- 三菱FX3U-485BD与威纶通触摸屏通讯程序 ~ 三菱FX3U-485BD与威纶通触摸屏通讯程序,MT6051ip触摸屏 利用FX3U-485BD与威纶触摸屏通讯, 有PLC程序和触
- HFI脉振方波高频注入代码 增强滑膜esmo代码 配套有文档,学习提高,加薪升职必备 1esmo和 hfi详细开发文档
- 移相全桥控制算法的C代码+仿真模型,电压单闭环,电压外环电流内环双闭环,采用S函数调用的方式直接在simulnik环境下对C代码进行仿真 已经在样机上验证过,波形非常好
- 利用最大相关最小冗余mRMR算法对特征变量做特征重要性排序,实现特征选择 通过重要性排序图,选择重要的特征变量,以期实现数据降维的目的 程序直接替数据就可以用,程序内有注释,方便学习和使用 程序
- win32汇编环境,对话框程序中对按钮控件常用操作的示例
- 三相桥式PWM整流电路matlab2021a 整流电路采用全控型三相桥式整流电路, 采用dq解耦控制,双环PI调节, 采用SPWM调制,输入前加设LCL滤波器, 可以得到整流后直流电压波形,波形质量较
- MATLAB代码:含热电联供的智能楼宇群协同能量管理 关键词:楼宇能量管理系统;热电联供系统;Stackelberg博弈;内部价格;需求响应 参考文档:《含热电联供的智能楼宇群协同能量管理》华北电力
- 出b型关联度+topsis模型 物资需求紧迫度代码-采用ahp+熵权法复合定权 火采用matlab,代码复现的参考文献名《考虑受灾点差异性的应急物资配送方案研究》 火所有代码+指导运行150r
- S7-1200S7-1500SCL小实例文档和Demo实例下载
- com.zuoyebang.knowledge_14.15.0.apk
- 20250110142809.jpg
- com.tencent.mobileqq_connectSdk.25.01.10.20.log
- MATLAB代码:Cplex二阶锥规划最优潮流入门 关键词:二阶锥 最优潮流 SOCP 参考文档:《主动配电网最优潮流研究及其应用实例》 仿真平台:MATLAB + Cplex 主要内容:最优潮流研
- MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 参考文档:电动汽车(储能单元)参与的多目标优化调度 仿真平台:MATLAB YALMIP+C
- matlab程序:EMD-SSA-BiLSTM预测程序 将数据进行EMD分解,再采用经蚁群算法优化的双向长短时记忆神经网络进行预测,最终将结果重组得到最终预测结果 注意:程序功能如上述,可进行负荷预
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈