IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]【字符串处理算法】获取最长公共子串的算法设计及C代码实现

    zhouzxi发表于 2016-03-22 17:14:30
    love 0

    一、需求描述

    输入两个字符串,编写程序获取这两个字符串的第一个最长公共子串。

    例如,输入的字符串为“abcdef”和“fecdba”,那么这两个字符串的第一个最长公共子串为“cd”。

     

    二、算法设计

    我们可以首先寻找两个字符串中的第一个相等的字符,然后分别向后移动来比较对应位置的字符是否相等。

    即如果字符串1为“1234abcd”,字符串2为“abd”,那么首先发现字符串1中的第五个字符“a”与字符串2中的第一个字符“a”相等,接着字符串1中的第六个字符“b”与字符串2中的第二个字符“b”相等,再接着发现字符串1中的第七个字符“c”与字符串2中的第三个字符“d”不相等,此时比较结束。也就是说字符串1和字符串2的最长公共子串为“ab”。

     

    三、特殊流程考虑

    在编写程序的过程中,我们要对输入的字符串的长度及格式多做考虑,如:

    1.如果输入的两个字符串之一含有中文字符,那么程序直接返回而不执行后续流程。

    2.如果输入的两个字符串之一含有空格,那么程序获取空格之前的字符串进行后续操作。

     

    四、程序代码

     

    {CSDN:CODE:1619669}

     

    五、程序测试

    我们将编写好的程序“GetLCS.c”上传到Linux机器,并使用“gcc -g -o GetLCS GetLCS.c”命令对该程序进行编译,生成“GetLCS”文件。下面对程序进行详细的测试。

    1.输入字符串1为“abcdef”,字符串2为“hijkabm”时,程序运行情况如下:

    Please input string1:

    abcdef

    InputStr1=abcdef

    Please input string2:

    hijkabm

    InputStr2=hijkabm

    abcdef和hijkabm的最长公共子串是:ab, 其长度是:2

     

    2.输入字符串1为“1234!@#”,字符串2为“5678!@#1”时,程序运行情况如下:

    Please input string1:

    1234!@#

    InputStr1=1234!@#

    Please input string2:

    5678!@#1

    InputStr2=5678!@#1

    1234!@#和5678!@#1的最长公共子串是:!@#, 其长度是:3

     

    3.输入字符串1为“123你们好”,字符串2为“123”时,程序运行情况如下:

    Please input string1:

    123你们好

    InputStr1=123你们好

    Please input string2:

    123

    InputStr2=123

    123你们好 has Chinese character, pleasecheck!

     

    4.输入字符串1为“123abc”,字符串2为“abd ef”时,程序运行情况如下:

    Please input string1:

    123abc

    InputStr1=123abc

    Please input string2:

    abd ef

    InputStr2=abd

    123abc和abd的最长公共子串是:ab, 其长度是:2

     

    5.输入字符串1为“abcdef”,字符串2为“123456”时,程序运行情况如下:

    Please input string1:

    abcdef

    InputStr1=abcdef

    Please input string2:

    123456

    InputStr2=123456

    abcdef和123456无公共子串!

     

    六、需求扩展

    基于本文中的需求和程序,我们可考虑对需求进行以下扩展:

    1.如果两个字符串有多于一个最长公共子串,则都要将它们输出,即如果字符串1为“1234abcd”,字符串2为“abd12”,那么程序输入的最长公共子串为“12”和“ab”。

    2.不限制输入字符串中不能出现中文字符,即如果字符串1为“我们123”,字符串2为“我们”,那么最长公共子串为“我们”。

     



沪ICP备19023445号-2号
友情链接