[C/C++笔面试]编程查找两个字符串中的最大公共子串

原创 2016年08月28日 17:00:55
/*********************************************************
-  Copyright (C): 2016
-  File name    : commonstring.c
-  Author       : - Zxn -
-  Date         : 2016年08月28日 星期日 16时31分21秒
-  Description  : 

*  *******************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *commonstring(char *str1, char *str2)
{
    int i;
    int j;
    char *shortstr;
    char *longstr;
    char *substr;
    //参数检测
    if (NULL == str1 || NULL == str2)
    {
        return NULL;
    }
    //确定长短字符串
    if (strlen(str1) <= strlen(str2))
    {
        shortstr = str1;
        longstr = str2;
    }
    else
    {
        shortstr = str2;
        longstr = str1;
    }

    //如果断字符串直接就是长字符串的子串则直接返回
    if (strstr(longstr, shortstr) != NULL)
    {
        return shortstr;
    }
    //创建一个临时空间
    substr = (char *)malloc(sizeof(char)*(strlen(shortstr)+1));
    //这里利用两层循环对短字符串不断的缩短,然后在长字符串中查找,如果
    //找到则返回
    //算法示例:
    //longstr  = "hgfasdxcv"
    //shortstr = "svasdg"
    //外层for每次让短字符串从后面开始向前减少,
    //比如svasdg-->svasd-->svas>...直到没有
    //而内层for每次让短字符串从前面开始向后减少
    //比如当i = 5时,shortstr = "svasd";
    //j = 0, substr = svasd;
    //j = 1, substr = vasd;
    //j = 2, substr = asd
    //....如此往复直到找到最终答案
    for (i = strlen(shortstr) - 1; i > 0; i--)
    {
        for (j = 0; j <= strlen(shortstr) - i;j++)
        {
            memcpy(substr, &shortstr[j], i);
            substr[i] = '\0';

            if (strstr(longstr, substr) != NULL)
            {
                return substr;
            }
        }
    }
    return NULL;
}


int main()
{
    char *str1 = (char *)malloc(256);
    char *str2 = (char *)malloc(256);
    char *common = NULL;

    gets(str1);
    gets(str2);

    common = commonstring(str2, str1);

    printf("the longest common string is %s\n", common);

    return 0;
}

程序运行结果
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

求两字符串最长公共连续子串---C++编程

题目:有两个字符串(可能包含空格),找出其中最长的公共连续子串,并输出其长度。  输入描述:输入为两行字符串(可能包含空格),长度均小于等于50。 输出描述:  输出为一个整数,表示最长公共连续子...

面试题之求两个字符串的最大公共子串

面试题之求两个字符串的最大公共子串 字符串的题目感觉真的好难,关于字符串的题目,需要弄懂题意的思路,思路对了,编程就ok了(好像是废话哦)。下面分析下求两个字符串的最大公共子串的解题思路。 首先我们...

2017校园招聘编程题——两个字符串中找到最大公共字符串

输入两个字符串,从中找到它们最大的公共子字符串。分析了解题思路,并贴出了Java和C++两种语言程序。...

求两个字符串的最大公共字串问题

以下题目来自阿里2015校园招聘、牛客网。 给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如,query为 "...

135、编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为 "cad"

35、编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为 "cad" /* 35、编程实现:找出两个字符串中最大公共子字符串,如"abccade"...

两个字符串的最大公共子串

今天去面试,面试官出了一道题,求两个字符串的最大公共子串,一听
  • zdfjf
  • zdfjf
  • 2014年09月26日 21:04
  • 198

LCS求两个字符串的最大公共子串

//求两个字符串的公共最大子串 public class GetLCStringTest { public static String getLCSring(String str1, Strin...

算法题-两个字符串的最大公共子串

题目:给定一个query和一个text,均由小写字母组成。要求在text中找出以同样顺序连续出现在query中最长连续字母序列的长度。例如,query为“acbac”,text为“acaccbabb”...

找出两个字符串的最大公共子串

#include #include #include #include using namespace std; /*不太合理的地方时返回堆内存 防止内存泄露的任务交给了函数调用者*/ char* G...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[C/C++笔面试]编程查找两个字符串中的最大公共子串
举报原因:
原因补充:

(最多只允许输入30个字)