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

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

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

#include<iostream>
#include<string>

using namespace std;

int main() {
    string a, b;
    getline(cin, a);
    getline(cin, b);
    if (a.size() > b.size()) {
        swap(a, b);//a为长度短的字符串
    }
    if (b.find(a) != string::npos) { //如果a在b中
        cout << a << endl;
    } else {
        int i, j;
        int count_ij = 1;//记录当前最长公共子串长度
        string s, t;
        for (i = 0; i < a.size(); ++i) {
            for (j = 1; j <= a.size() - i; ++j) {
                t = a.substr(i, j);//t: a[i]-a[i+j-1],一开始为a[0]
                if (b.find(t) == string::npos) { //t不在b里就中止循环
                    if (count_ij < t.size() - 1) { //t长度大于最长子串长度
                        s = a.substr(i, j - 1);
                        count_ij = s.size();
                    }
                    break;
                }
            }
            //已经遍历到最后一个字符但是t还在b里面
            if (j - 1 == a.size() - i) {
                if (count_ij < t.size()) {
                    s = t;
                    count_ij = s.size();
                }
                break;
            }
        }
        cout << s << endl;
    }
    return 0;
}

本题的思路是遍历较短的字符串,找到最长的公共子串

全部评论

相关推荐

头像
11-03 16:48
已编辑
百度_高级研发工程师
事实是检验真理的唯一标准。&nbsp;无论我们怎么去说,去讲述,去证明,都抵不过一个offer来得实在,无论我们怎么去复现求职中的摸爬滚打、扒皮抽筋、狼狈不堪,都抵不过你在简历写上大厂的名字(外包不算)。&nbsp;所以在我求职期间,我什么话都不说,什么话都不讲,因为没有意义,虽然我总讲过程才是意义,但只有当你上岸的那一刻,你才有资格回想在水里的挣扎,只有等你出了山,你才知道山的全貌。&nbsp;我为什么一定要离开华为OD,难道它不稳定吗,不能赚钱吗。为了证明自己,那肯定有的。其实更多的是印证我的认知是否真的正确。&nbsp;(给不了解我的人交代一下背景,在下双非一本,gap一年,华为OD外包,摸爬滚打4个月,艰难上岸百度正编)一、...
先锋战士:说得很真诚。鄙视链自古有之,学历,家庭背景,财富,权利。从小有之,小学羡慕那些当班委的,中学羡慕那些学生会的,高中羡慕尖子班拿教学金的,大学羡慕高绩点,毕业了羡慕进大厂的。工作了,又羡慕高职级的,再后来又羡慕别人早早结婚的。我想表达的观点很简单,无论是华为od还是百度,都是经历,没有孰高孰低,为了抵达下一个风景,总会付出更多东西,但不就是人生吗?正如登山,每个阶段的山,都要想办法攀登,在博主的文字中,见到了坚持和积极寻找问题解决办法的心态
学历对求职的影响
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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