题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

http://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

思路

  1. 到字符串较少的数据
  2. 循环比较两个字符串中子串个数
  3. 如果和前1个子串相比,子串长度大则进行替换
  4. 将该子串存到另1个字符串数组中
  5. 循环完毕输出结果

Answer

#include <stdio.h>
#include <string.h>

int main() {
    char str1[1000];
    char str2[1000];
    char ans[1000];
    int max=0;
    while (scanf("%s\n%s", str1, str2) != EOF) {

        //找到字符串较少的数据
        if (strlen(str1) > strlen(str2)) {
            char temp[1000];
            strcpy(temp, str1);
            strcpy(str1, str2);
            strcpy(str2, temp);
        }
        
        for(int i=0; i<strlen(str1);i++){
            
            for(int j=0; j<strlen(str2); j++){
                int n=0;
                while(str1[i+n]== str2[j+n] && str1[i+n]!='\0'){
                    n++;
                }
                if(n>max){
                    max=n;
                    strcpy(ans,str1+i);
                    ans[max]='\0';
                }    
            }            
        }
        printf("%s\n",ans);     
    }
    return 0;
}
华为机试刷题 文章被收录于专栏

刷华为机试习题

全部评论

相关推荐

拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
3 4 评论
分享
牛客网
牛客企业服务