KS31. 最大公共子串
描述
输入描述
文本格式,2个非空字符串(字母数字组成),2个字符串以","英文逗号分割。输出描述
整形,为匹配到的最长子串长度示例1
输入:
bab,caba
输出:
2
C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2020-05-20
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <math.h> int main() { char str1[100]; char str2[100]; int res[100][100]={0}; scanf("%[^,],%s", str1, str2); int len1 = strlen(str1); int len2 = strlen(str2); int m_len = 0; for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { if (str1[i] == str2[j]) { if (i == 0 || j == 0) res[i][j] = 1; else res[i][j] = res[i - 1][j - 1] + 1; } m_len = m_len>res[i][j]? m_len:res[i][j]; } } printf("%d ", m_len); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-08-23
#include<stdio.h> #include<string.h> int main() { char a[1000],b[1000],c; int i=0,j,sum=0,max=0,i_,j_; /*input*/ while ((c=getchar())!=',') { a[i++]=c; } gets(b); for(i=0;i<strlen(a);i++) { for(j=0;j<strlen(b);j++) { sum=0; if(a[i]==b[j]) { i_=i; j_=j; while (a[i_]==b[j_]) { i_++; j_++; sum++; } if(sum>max) max=sum; } } } printf("%d\n",max); return 0; }