c++ 动态规划 | #最长公共子串#

最长公共子串

http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac

动态规划比双指针要慢

    string LCS2(string str1, string str2) {
	if (str1.size() == 0 || str2.size() == 0) {
        return "";
    }

    vector<vector<int>> dp(str1.size(), vector<int>(str2.size(), 0));

    int maxLen = 0, maxIndex = 0; // maxIndex 表示字符串1的索引
    for (int i = 0; i < str1.size(); i++) {
        dp[i][0] = str1[i] == str2[0] ? 1 : 0;
        if (dp[i][0] > maxLen) {
            maxLen = 1;
            maxIndex = i;
        }
    }

    for (int j = 0; j < str2.size(); j++) {
        dp[0][j] = (str1[0] == str2[j]) ? 1 : 0;
    }

    for (int i = 1; i < str1.size(); i++) {
        for (int j = 1; j < str2.size(); j++) {
            if (str1[i] == str2[j]) {
                dp[i][j] = dp[i - 1][j - 1] + 1;
            } else {
                dp[i][j] = 0;
            }

            if (dp[i][j] > maxLen) {
                maxLen = dp[i][j];
                maxIndex = i;
            }
        }
    }

    return str1.substr(maxIndex - maxLen + 1, maxLen);	
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
点赞 评论 收藏
分享
真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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