alg-最长公共子串

Posted smallredness

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alg-最长公共子串相关的知识,希望对你有一定的参考价值。

class Solution 
public:
    const std::vector<std::string> LongestCommonSubstring(const std::string& s1, const std::string& s2) 
        if (s1.empty() || s2.empty()) 
            return std::vector<std::string>();
        

        //dp
        std::vector<std::vector<int>> dp(s1.size()+1,std::vector<int>(s2.size()+1,0));
        int max_len=-1;
        for(int i=1;i<s1.size()+1;i++) 
            for(int j=1;j<s2.size()+1;j++) 
                dp[i][j]=(s1[i-1]==s2[j-1])?dp[i-1][j-1]+1:0;
                if(dp[i][j]>max_len) 
                    max_len=dp[i][j];
                
            
        

        //print result
        std::vector<std::string> res;
        for(int i=1;i<s1.size()+1;i++) 
            for(int j=1;j<s2.size()+1;j++) 
                if(dp[i][j]==max_len) 
                    res.push_back(s1.substr(i-max_len,max_len));
                
            
        
        
        return res;
      
;

以上是关于alg-最长公共子串的主要内容,如果未能解决你的问题,请参考以下文章

最长公共子串

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

寻找最长公共子串(高分)

动态规划——最长公共子序列与最长公共子串 (含Python实现代码)

求两个字符串的最长公共子串,要求输入两个字符串,输出他们的最长公共子串,包括长度。

最长公共子串与最长公共子序列