博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构——算法之(032)(求两个串中的第一个最长子串)
阅读量:5749 次
发布时间:2019-06-18

本文共 1036 字,大约阅读时间需要 3 分钟。

【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】

题目:

求两个串中的第一个最长子串(神州数码曾经试题).如"abractyeyt","dgdsaeactyey"的最大子串为"actyey".

题目分析:

1、这里仅仅是实现了简单的字符串算法(最大支持字符串长度64),主要是展示算法思想

2、思路是把2个字符串每一个字符的匹配关系,映射到一张二维数组表中,匹配写1,非匹配写0

算法实现:

#include 
#include
#include
/*** 最长支持的字符串大小*/#define MAX_SIZE 64/*** 解法就是用一个矩阵来记录两个字符串中全部位置的两个字符之间的** 匹配情况,若是匹配则为1,否则为0,然后求出对角线最长的1序列,其** 相应的位置就是最长匹配子串的位置.*/char *str_max_match(const char *s1, const char *s2){ if(!s1 || !s2) return 0; int l1 = strlen(s1); int l2 = strlen(s2); int M[MAX_SIZE][MAX_SIZE] = {0}; int i = 0, j = 0, max_len = 0, end = 0; for(i=0; i
max_len) { max_len = M[i][j]; end = i; } } } int start = end - max_len + 1;#if 0 char *re = calloc(1, max_len + 1); for(i=start; i<=end; ++i) re[i-start] = s1[i];#else char *re = strndup(s1 + start, max_len);#endif return re;}int main(int argc, char *argv[]){ char *re = str_max_match(argv[1], argv[2]); printf("%s---->%s<-----%s\n", argv[1], re, argv[2]); free(re); return 0;}

转载地址:http://wnhzx.baihongyu.com/

你可能感兴趣的文章
nginx 配置thinkphp,隐藏index.php
查看>>
jforum 分页功能
查看>>
我的友情链接
查看>>
left join , right join ,inner join 的区别
查看>>
利用WCF实现上传下载文件服务
查看>>
Lync Server 2010标准版系列PART7:Lync测试
查看>>
针对勒索病毒WannaCrypt微软官方应对指南
查看>>
Bootstrap3.0学习第三轮(栅格系统案例)
查看>>
HTML5商城开发一 楼层滚动加载数据
查看>>
ProxmoxVE 之 从debian拷贝数据到移动硬盘(USB口)
查看>>
POJ 3526 The Teacher’s Side of Math 题解《挑战程序设计竞赛》
查看>>
Use Hibernate4 native API
查看>>
我的友情链接
查看>>
springCloud(1):微服务简介
查看>>
Delphi 与 DirectX 之 DelphiX(38): TDIB.Filter();
查看>>
VTP各个版本的区别
查看>>
python生产者消费者模型
查看>>
初识Linux工作环境
查看>>
cocos2dx 适合初学者的学习笔记【二】
查看>>
PHP正则获取字符串中数字
查看>>