数据结构——算法之(032)(求两个串中的第一个最长子串)
来源:互联网 发布:office wps 知乎 编辑:程序博客网 时间:2024/06/16 06:19
【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】
题目:
求两个串中的第一个最长子串(神州数码以前试题).如"abractyeyt","dgdsaeactyey"的最大子串为"actyey".
题目分析:
1、这里只是实现了简单的字符串算法(最大支持字符串长度64),主要是展示算法思想
2、思路是把2个字符串每个字符的匹配关系,映射到一张二维数组表中,匹配写1,非匹配写0
算法实现:
#include <stdio.h>#include <string.h>#include <stdlib.h>/*** 最长支持的字符串大小*/#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<l1; ++i){for(j=0; j<l2; ++j){if(s1[i] == s2[j]){if(i == 0 || j == 0)M[i][j] = 1;elseM[i][j] = M[i-1][j-1] + 1;}/*record the max len*/if(M[i][j] > max_len){max_len = M[i][j];end = i;}}}int start = end - max_len + 1;#if 0char *re = calloc(1, max_len + 1);for(i=start; i<=end; ++i)re[i-start] = s1[i];#elsechar *re = strndup(s1 + start, max_len);#endifreturn 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;}
0 0
- 数据结构——算法之(032)(求两个串中的第一个最长子串)
- 求两个串中的第一个最长子串
- 求两个串中的第一个最长子串
- 求两个串中的第一个最长子串(神州数码以前试题)。
- 求两个串中的第一个最长子串,如"abractyeyt"和"dgdsaeactyey"的第一个最长字串是"actyey"
- Suffix Trees 求两个串中的第一个最长子串
- 数据结构——算法之(025)( 求一个数组的最长递减子序列)
- 求两个串中第一个最长的子串 神州数码
- 两个字符串的第一个最长公共子串
- 求字符串中由连续的相同字符组成的最长子串(如果有两个及两个以上的最长子串,则输出第二个)
- 求两个字符串最长公共子串LCS(其它)
- 求两个字符串最长公共子串(动态规划)
- 【算法】求两个字符串的最长子串
- 求两个串中的一个最长子串
- 求两个字符串中的最长公共子串的长度
- 求两个字符串a,b中的最长公共子串
- 算法——Manacher算法(求最长回文子串)
- 算法12—动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- jquery ready 原理
- android java内存
- vs2010编译错误:error MSB3073: :VCEnd" exited with code 1.
- wordpress中的.htaccess不知不觉的还原成默认
- Node.js 与Nginx比较
- 数据结构——算法之(032)(求两个串中的第一个最长子串)
- spring jar包详解
- douban一刻用到的开源代码
- 从VC工程的rc资源中将资源文件取出来或读出来
- 动态规划-背包问题
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- 详解协方差与协方差矩阵
- 用一生去诠释一句我爱你,不会后悔的
- 桑巴舞与samba服务器