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

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

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

#include <iostream>
using namespace std;

int main() {

    string s1,s2;cin>>s1>>s2;
    int len1 = s1.length(),len2 = s2.length();
    if(len2<len1){
        string tem = s1;s1 = s2;s2 = tem;
        int x = len1;len1 = len2;len2 = x;
    }
    int pre = 0,ed = 0;
    int l = 0,r = 0;
    for(int i = 0;i<len1;i++){
        for(int j = 0;j<len2;j++){
            int idx = 0;
            while(s1[i+idx]==s2[j+idx]&&j+idx<len2&&i+idx<len1){
                idx++;
            }
            l = i,r = i+idx;
            if(r-l+1>ed-pre+1){
                ed = r,pre = l;
            }
        }
    }
    // cout<<pre<<' '<<ed;
    for(int i = pre;i<ed;i++){
        cout<<s1[i];
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

根据字符串长度从头到尾遍历,维护相同的子串的开头和结尾的位置,最后输出即可,注意字符串当时的长度我先判断长度最长的哪一个。

活动地址https://www.nowcoder.com/discuss/726480854079250432

#牛客春招刷题训练营#
全部评论

相关推荐

牛客83265014...:完了,连现在都没开始面,13号投的是不是晚了
秋招的第一个offer,...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务