华为算法:最大公共子串的长度
一,题目描述
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。
注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。
输入描述:
输入两个只包含小写字母的字符串
输出描述:
输出一个整数,代表最大公共子串的长度
示例1
输入
asdfas
werasdfaswer
输出
6
二,想法以及代码
简单的想法就是先确定俩个字符串开始比较的位置,然后同时后移比较公共子串的长度
#include<stdio.h>
int main(){
char str1[100];
char str2[100];
while((scanf("%s %s",&str1,&str2))!=EOF){
int max=0;
//i,j是分别定义两个字符串的开始比较的位置
for(int i=0;i<strlen(str1);i++){
for(int j=0;j<strlen(str2);j++){
//n是公共子串,可以看作同时往后移的指针
int n=0;
//当出现不匹配时,得到从str1字符串从i开始,和str2从j开始时的公共子串
while(str1[i + n] != '\0' && str2[j + n] != '\0'
&& str1[i + n] == str2[j + n]) {
n++;
}
//比较最长公共子串的长度
if (n > max) {
max = n;
}
}
}
printf("%d",max);
}
}