c_cpp 打印最长的公共子字符串

Posted

tags:

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

//https://www.geeksforgeeks.org/print-longest-common-substring/
#include <bits/stdc++.h>
using namespace std;

void func(string s, string t) {
    int n=s.length(), m= t.length();
    int dp[n+1][m+1];

    int ans=INT_MIN, r,c;

    for (int i=0;i<=n;i++) {
        for (int j=0;j<=m;j++) {
            if (i==0 || j==0)
                dp[i][j]=0;
            else if (s[i]==t[j]) {
                dp[i][j]= 1+ dp[i-1][j-1];
                if (ans < dp[i][j]) {
                    ans= dp[i][j];
                    r= i;
                    c= j;
                }
            }
            else
                dp[i][j]= 0;
        }
    }
    cout<< "Length of LCS: "<< ans;
    string str;
    while (dp[r][c]!=0) {
        str+= s[r];
        r--;
        c--;
    }
    reverse(str.begin(), str.end());
    cout<<"\nLCS is: "<< str;
}

int main() {
    string s= "OldSite:GeeksforGeeks.org";
    string t= "NewSite:GeeksQuiz.com";

    func(s,t);
}

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

最长公共子序列Lcs(打印路径)

c_cpp 最长的公共子串

c_cpp 【动态规划】最长公共子串

迭代器生成器求最长公共子序列求最长公共子串爬楼梯按之字打印二叉树一个字符串按照k步长分组,再进行反转

动态规划之最长公共子序列(LCS)

最长公共子序列错误打印