题解 | #查找两个字符串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;
}

全部评论

相关推荐

在努力的外卷侠很靠谱:怎么,大家都没保底吗?我这美团已经入职了,不说了,系统派单了。
点赞 评论 收藏
分享
头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务