美文网首页
BM66 最长公共子串

BM66 最长公共子串

作者: help_youself | 来源:发表于2022-07-08 09:51 被阅读0次

方法1,动态规划,抄袭博客[1]:

class Solution {
public:
    string LCS(string str1, string str2) {
        // write code here
        std::string ret;
        int m=str1.size();
        int n=str2.size();
        int dp[m+1][n+1]={0};
        int start=0,mx=0;
        for(int i=0;i<m+1;i++){
            for(int j=0;j<n+1;j++){
                if(0==i||0==j) {
                    dp[i][j]=0;
                }else{
                    if(str1.at(i-1)==str2.at(j-1)){
                        dp[i][j]=dp[i-1][j-1]+1;
                    }else{
                        dp[i][j]=0;
                    }
                    if(dp[i][j]>mx){
                        mx=dp[i][j];
                        start=i-mx;
                    }
                }
            }
        }
        ret=str1.substr(start,mx);
        return ret;
    }
};

方法2,暴力求解,抄袭博客[2]:

class Solution {
public:
    string LCS(string str1, string str2) {
        int m=str1.size();
        int n=str2.size();
        int max=0;
        int start=0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                int same=0;
                if(str1.at(i)==str2.at(j)){
                    same++;
                    int t=i+1;
                    int k=j+1;
                    while(t<m&&k<n&&str1.at(t)==str2.at(k)){
                        same++;
                        t++;
                        k++;
                    }
                    if(same>max){
                        max=same;
                        start=i;
                    }
                }
            }
        }

        std::string ret=str1.substr(start,max);
        return ret;
    }
};

 在牛客网中测试,方法2的运行速度和占用内存均优于方法1。

[1]动态规划——最长公共子串,没有比这更通俗易懂的了
[2]牛客BM66-最长公共子串-C++

相关文章

  • BM66 最长公共子串

    方法1,动态规划,抄袭博客[1]: 方法2,暴力求解,抄袭博客[2]:  在牛客网中测试,方法2的运行速度和占用内...

  • 最长公共子序列和最长公共子串

    最长公共子序列和最长公共子串区别 最长公共子串(Longest CommonSubstring)和最长公共子序列(...

  • 子串 子序列 总结

    最长公共子串 子串的要求比子序列严格,所以可以讨论子串的终点 最长公共子序列 DP解 递归+memo 最长公共回文...

  • LCS问题

    LCS问题包括最长公共子序列和最长公共子串,其中,最长公共子串要求必须连续。 对于二者的求解方式 最长公共子序列:...

  • 最长公共 / 对称字串

    求最长对称字串是求最长公共子串的变形.. (๑˘ ˘๑) 最长公共子串 Longest Common Subseq...

  • 字符串算法

    最长公共前缀 最长回文串 最长回文子序列 最长公共子串 反转单词顺序列 反转字符串 字符串转数字 IP-int互转

  • 06-18:刷题综合一:动态规划

    1、最长公共子串 牛客网:最长公共子串 https://www.nowcoder.com/practice/f33...

  • 每天一道算法题18

    【最长公共子序列,子串】给定两个字符串上str1 和 str2, 求两个字符的最长公共子序列和最长公共子串。 最长...

  • 两个字符串的最长公共子串

    最长公共子串(Longest Common Substring)与最长公共子序列(Longest Common S...

  • 动态规划 最长公共子串

    核心思路和最长公共子序列一样 区别在于子串必须连续 可以先看我之前这篇文章最长公共子序列问题总结 最长公共子串同样...

网友评论

      本文标题:BM66 最长公共子串

      本文链接:https://www.haomeiwen.com/subject/lmnmbrtx.html