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

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

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

#include <iostream>
#include <string>

using namespace std;

#define N 330
int dp[N][N];

string getLongestCommonString(string& a, string& b) {
    int lena = a.size() - 1;
    int lenb = b.size() - 1;
    int maxlen = 0;
    int maxidx = -1;
    for (int i = 1; i <= lena; ++i) {
        for (int j = 1; j <= lenb; ++j) {
            if (a[i] == b[j])    dp[i][j] = dp[i - 1][j - 1] + 1;
            if (dp[i][j] > maxlen) {
                maxlen = dp[i][j];
                maxidx = i;
            }
        }
    }
    return maxlen > 0 ? a.substr(maxidx - maxlen + 1, maxlen) : "";
}

int main() {
    string a, b;
    cin >> a >> b;
    a = " " + a;    // 实现输入的字符串从下标1开始
    b = " " + b;    // 实现输入的字符串从下标1开始
    if (a.length() > b.length()) swap(a, b); // 保证字符串长度a <= b
    cout << getLongestCommonString(a, b) << endl;

    return 0;
}

全部评论

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 17:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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