关闭

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

标签: C-C++面试笔试题找最大公共字串
693人阅读 评论(0) 收藏 举报
分类:
/*********************************************************
-  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;
}

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

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

求两个字符串的最大连续公共字串

如下两个字符串,公共连续字符串为abcdf,求出这个abcdf, "aaffffsfabcdfasf", "aaaadfsabcdfsdb" 假设字符串长度分别为m,n,这个题有个m*...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2016-09-14 14:48
  • 1748

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

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

【字符串操作】 寻找两个字符串中的 最大公共子串

*题目描述: 请编写一个函数,求2个字符串的最长公共子串,n        例如有2个字符串为:        Name some local bus.        lo...
  • vevenlcf
  • vevenlcf
  • 2015-07-17 10:26
  • 1608

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

35、编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为 "cad" /* 35、编程实现:找出两个字符串中最大公共子字符串,如"abccade"...
  • u012605629
  • u012605629
  • 2014-11-04 22:27
  • 1701

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

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

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

一、需求描述输入两个字符串,编写程序获取这两个字符串的第一个最长公共子串。例如,输入的字符串为“abcdef”和“fecdba”,那么这两个字符串的第一个最长公共子串为“cd”。 二、算法设计我们可以...
  • zhouzxi
  • zhouzxi
  • 2016-03-22 17:14
  • 2040

用后缀数组求两个字符串的最长公共子串

对于两个字符串,不好直接运用后缀数组,所以我们可以把两个子串串中间用一个在字符串中不会出现的字符连接起 来,比如'$‘,计算后缀数组,检查后缀数组中所有相邻后缀。分属于两个字符串的后缀的lcp的最大值...
  • u013008291
  • u013008291
  • 2015-08-30 17:28
  • 1956

python实现求字符串最长公共子串

本文主要参考http://www.cnblogs.com/ider/p/longest-common-substring-problem-optimization.html的讲解,本人自己用pytho...
  • silence2015
  • silence2015
  • 2017-07-10 10:56
  • 658

两个字符串中最长公共子字符串

如"abcde" "bkcdq" 最大公共子字符串是"cd" public static void findMaxCommonStr(){ Scanner s = new Scanner(Sys...
  • lingzhm
  • lingzhm
  • 2015-08-21 16:06
  • 2092

黑马程序员_编写程序,获取两个字符串中最大相同子串

------- android培训、java培训、期待与您交流!---------        前段时间看完了毕老师关于字符串讲解的视频,最近为了加强对字符串的理解,就找到了获取两个字符串的最大子...
  • LFB168
  • LFB168
  • 2015-09-19 11:05
  • 831
    个人资料
    • 访问:118728次
    • 积分:2456
    • 等级:
    • 排名:第17435名
    • 原创:128篇
    • 转载:3篇
    • 译文:0篇
    • 评论:11条