C++,代码易懂易写才是最让人舒服

公共子串计算

http://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

#include <bits/stdc++.h>
using namespace std;
int LCS(const string& str1,const string& str2) {
        // write code here
        int m = str1.size();
        int n = str2.size();
        // dp[i][j] str1前i个字符和str2前j个字符(以其为尾字符)的最长公共子串长度
        int dp[m+1][n+1];
        int maxlen = 0;
        //base case
        for(int i = 0; i <= m; ++i) dp[i][0] = 0;
        for(int j = 0; j <= n; ++j) dp[0][j] = 0;
        for(int i = 1; i <= m; ++i) {
            for(int j = 1; j <= n; ++j) {
                if(str1[i-1] == str2[j-1]) dp[i][j] = dp[i-1][j-1] + 1;
                else dp[i][j] = 0;
                if(dp[i][j] > maxlen) {
                    maxlen = dp[i][j];
                }
            }
        }
        return maxlen;
}
int main(){
    string s1,s2;
    cin>>s1>>s2;
    cout<<LCS(s1,s2);
}
全部评论
牛客上看到最赏心悦目的题解
1 回复 分享
发布于 2022-03-22 10:24
空间复杂度不符合要求
点赞 回复 分享
发布于 2022-05-11 11:12
有O(n^2)还会要求O(n^3)嘛,小于O(n^3)应该可以吧?
点赞 回复 分享
发布于 2022-07-26 23:49
代码没错,不过描述稍微有点问题,应该是,代表str1前i个字符和str2前j个字符中,以str1[i]以及str2[j]结尾的公共子串长度
点赞 回复 分享
发布于 2023-02-25 01:57 甘肃
虽然不影响最终结果,但str1[i-1] != str2[j-1]时,dp[i][j]=0,绝对是错的
点赞 回复 分享
发布于 2023-05-14 11:34 广东

相关推荐

像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
评论
26
9
分享
牛客网
牛客企业服务