【牛客题霸每日一题】NC127 最长公共子串 C++ 题解


简单DP,tag[i][j] 表示截止到 s1 的 i 位置和 s2 的 j 位置的最长公共子串长度。由于子串连续,最后找到最大值位置向前递推即可。代码如下:
class Solution {
public:
    /**
     * longest common substring
     * @param str1 string字符串 the string
     * @param str2 string字符串 the string
     * @return string字符串
     */
    string LCS(string s1, string s2) {
        // write code here
        int m = s1.size();
        int n = s2.size();
        int len = 0;
        string ret = "";
        int x, y;
        vector<vector<int>>tag(m + 1, vector<int>(n + 1, 0));
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (s1[i - 1] == s2[j - 1]) {
                    tag[i][j] = tag[i - 1][j - 1] + 1;
                    if (len < tag[i][j]) {
                        len = tag[i][j];
                        x = i, y = j;
                    }
                }
                else
                    tag[i][j] = 0;
            }
        }
        if (len == 0)ret = "-1";
        else {
            for (int i = len; i >= 1; --i) {
                ret += s1[x - i];
            }
        }
        return ret;
    }
};




#题解##牛客题霸#
全部评论

相关推荐

在瑞幸干两年,奥特曼都得闪灯
不知名的牛友:奥特曼每天只上3分钟班
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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