HJ65. 查找两个字符串a,b中的最长公共子串
描述
输入描述
输入两个字符串
输出描述
返回重复出现的字符示例1
输入:
abcdefghijklmnop abcsafjklmnopqrstuvw
输出:
jklmnop
C 解法, 执行用时: 1ms, 内存消耗: 276KB, 提交时间: 2020-11-27
#include <stdio.h> #include <string.h> #include <stdlib.h> void calc(char *a, char *b) { int x=strlen(a), m=0, index=0; char res[1000]={0}; for(int i=0;i<x;i++) { for(int j=1;i+j<=x;j++) { if(j<=m) { continue; } char tmp[1000]={0}; memcpy(tmp, &a[i], j); if(NULL!=strstr(b, tmp)) { m=j; memcpy(res, tmp, j); } else { break; } } } printf("%s\n", res); } int main() { char a[1000], b[1000]; while(scanf("%s", a)!=EOF) { scanf("%s", b); if(strlen(a)>strlen(b)) { calc(b, a); } else { calc(a, b); } } }
C 解法, 执行用时: 1ms, 内存消耗: 308KB, 提交时间: 2021-04-02
#include<stdio.h> #include<string.h> void fun(char c1[100],char c2[100]) { int i,pos=0,num,max=0,t,w; int len1=strlen(c1); int len2=strlen(c2); if(len1<=len2) { for(t=0;t<len1;t++) { for(w=0;w<len2;w++) { num=0; i=0; while(c1[t+i]==c2[w+i]) { num++; i++; } if(max<num) { max=num; pos=t; } } } for(i=0;i<max;i++) { printf("%c",c1[pos+i]); } } else { for(t=0;t<len2;t++) { for(w=0;w<len1;w++) { num=0; i=0; while(c2[t+i]==c1[w+i]) { num++; i++; } if(max<num) { max=num; pos=t; } } } for(i=0;i<max;i++) { printf("%c",c2[pos+i]); } } printf("\n"); } int main() { char c1[1000],c2[1000]; while(scanf("%s\n%s",c1,c2)!=EOF) { fun(c1,c2); } return 0; }