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

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

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

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    string s, l;
    cin >> s >> l;
    if (s.size() > l.size()) swap(s, l);

    vector<vector<int>> dp(s.size() + 1, vector<int>(l.size() + 1, 0));
    int maxLen = 0;
    int pos;
    for (int i = 1; i <= s.size(); ++i) {
	  	//注意把短字符串循环放在外侧,这样可以先碰到短串靠前位置的公共子串
        for (int j = 1; j <= l.size(); ++j) {
            if (s[i - 1] == l[j - 1]) {
                dp[i][j] = dp[i - 1][j - 1] + 1;

            }
            else {
			  	// 可以不写,公共子串赋0,公共子序列为max(dp[i - 1][j], dp[i][j - 1])
                dp[i][j] = 0;
            }

            if (dp[i][j] > maxLen) {
                maxLen = dp[i][j];
                pos = i - 1;
            }
        }
    }

    if (maxLen) cout << s.substr(pos - maxLen + 1, maxLen) << endl;
    else cout << "" << endl;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 17:46
暑期就挂了,秋招还有机会吗
大聪明777:研发提前批,14号刚开的,官网上面的配图上有写。提前批没过的话,秋招还可以投,不过前面的笔试/面试记录会被保留,供秋招参考
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
大疆在线测评都考什么呀,会考企业概况啥的吗
又被画饼了的做题家很...:不会。刚做完,就是材料分析、态度题、算术题、逻辑题。总共60道。
投递大疆等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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