[006] largest_common_substring

[Description] Given two different strings, find the largest successive common substring.

e.g.  str1[]="qwertyuiopasdfgh";  str2[]="jhdfgqwertyudfxcv";

        LCsubstr[]="qwertyu";

[Thought] show the correspondence result of this two strings from the 2-D array of ‘record[][]‘, and find the longest non-zero diagonal elements. To save the auxiliary space, we can use only 1-D array ‘record[]‘ to implement.   O(n^2)  O(m)

[Implementation] C code:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4
 5 char* LCS(char longer[], char shorter[])
 6 {
 7         int longer_len=strlen(longer);
 8         int shorter_len=strlen(shorter);
 9         int record[shorter_len];
10         int i,j,max_len=0,substr_end=0,substr_begin;
11
12         for(i=0;i<longer_len;i++)
13         {
14                 for(j=shorter_len-1;j>=0;j--)
15                 {
16                         if(longer[i]==shorter[j])
17                         {
18                                 if(0==i || 0==j)
19                                 {
20                                         record[j]=1;
21                                 }
22                                 else
23                                 {
24                                         record[j]=record[j-1]+1;
25                                 }
26                         }
27                         else
28                         {
29                                 record[j]=0;
30                         }
31
32                         if(record[j]>max_len)
33                         {
34                                 max_len=record[j];
35                                 substr_end=j;
36                         }
37                 }
38         }
39
40         substr_begin=substr_end-max_len+1;
41
42 //      char substr[max_len];
43         char* substr=(char*)malloc(max_len);
44         for(i=0;i<max_len;i++)
45         {
46                 substr[i]=shorter[substr_begin+i];
47         }
48         return substr;
49 }
50
51 int main()
52 {
53         char longer[]="asdfghjklqwertyyuio";
54         char shorter[]="zxvsdffghwerxv";
55
56         printf("The longer str:\n\t%s\n",longer);
57         printf("The shorter str:\n\t%s\n",shorter);
58         printf("The lagest common str:\n\t%s\n",LCS(longer,shorter));
59         return 0;
60 }
时间: 2024-10-05 03:34:47

[006] largest_common_substring的相关文章

[LeetCode] 006. ZigZag Conversion (Easy) (C++/Java/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 006.ZigZag_Conversion (Easy) 链接: 题目:https://oj.leetcode.com/problems/zigzag-conversion/ 代码(github):https://github.com/illuz/leetcode 题意: 把一个字符串按横写的折线排列. 分析: 直

006.ASP.NET MVC ActionResults说明

原文:http://rachelappel.com/asp.net-mvc-actiohttp://i.cnblogs.com/EditPosts.aspx?postid=3857238&update=1nresults-explained 1.前言 Action Result在ASP.NET MVC控制器系统中是非常重要的,我们要时常关注这些.理解它们是怎么给我们带来更多的选择会让你的代码更加健壮. 2.什么是Action Result Action Result是控制器方法(动作方法)的返回

006:欧拉项目平方和与和的平方的差

Sum square difference Problem 6 The sum of the squares of the first ten natural numbers is, 12 + 22 + ... + 102 = 385 The square of the sum of the first ten natural numbers is, (1 + 2 + ... + 10)2 = 552 = 3025 Hence the difference between the sum of

[Linux 006]——grep和正则表达式

在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配,这是一个强大的功能,有必要好好掌握. 1.grep 初体验 grep PATTERN [OPTIONS] FILE:在文件中按照模式进行查找.FILE 是我们要查找的目标文件,如果不指定目标文件,grep 将会从标准输入中读取输入的内容,然后进行匹配.为了方便起见,本文的所有演示都在命令行中通过标准

【LeetCode】006 ZigZag Conversion

题目:LeetCode 006 ZigZag Conversion 题意:给一个字符串"PAYPALISHIRING" 按照ZigZag的形式,即按照下面的顺序排列,然后 在转换成一行一行的读取方式,得到"PAHNAPLSIIGYIR".其中行数不定. 思路:肯定是不能去开一个二维数组的,必须要找出规律来直接输出.发现间隔是和总行数numRows有关,另外,第一行和最后一行需要单独考虑,每两个字符间隔一致,为2*(numRows-1):其余行有两种间隔,设当前为第L

《zw版&#183;Halcon-delphi系列原创教程》 Halcon分类函数006, image,影像处理(像素图)

<zw版·Halcon-delphi系列原创教程> Halcon分类函数006, image,影像处理(像素图) 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“procedure” :: 用大写字母“X”,替换:“IHUntypedObjectX” :: 省略了字符:“const”.“OleVariant” [示例] 说明 函数: procedure AddNoiseWhiteContourXld( const Contours: IHUntypedO

【qt学习006】Dialogs and MainWindows 小结

学习<c++GUI Programming with Qt 4>已有一段时间,非常享受这本书的阅读过程,内容简洁清晰,让人一目了然. 马上要学习更难的内容,所以先做个总结,然后再继续前进. 总结的形式尽量简洁,以代码为主,再将一些我认为重要的笔记作为注释添加在代码中.内容大多是摘抄自书本,但也有一些地方属于个人理解. 闲话少谈,下面列出代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 // example1

[cocos2dx笔记006]流格式日志

在cocos2dx 2.2.2版本中,cocos使用的是CLOG写入日期,其格式是C的Printf方式生成日志.现在也有很多C++流式日志,类似于cout这样的操作.我看了也有很多,log4cxx,等.但是个人移动有些大.我就在我原来的日志中增加了对流式的支持.并顺利移植到cocos2dx环境中使用.下载是在cocos2dx使用的例子. cocos2dx的日志端类: #ifndef _X_COCOS2D_LOG_END_H_ #define _X_COCOS2D_LOG_END_H_ #incl

006:单词序列

006:单词序列 题目链接:http://cxsjsxmooc.openjudge.cn/2017t2summerfinal/006/ 总时间限制: 1000ms 内存限制: 1024kB 描述 给出两个单词(开始单词和结束单词)以及一个词典.找出从开始单词转换到结束单词,所需要的最短转换序列.转换的规则如下: 1.每次只能改变一个字母 2.转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中 例如: 开始单词为:hit 结束单词为:cog 词典为:[hot,dot,dog,lot,lo