公共字串计算

来源:互联网 发布:排列组合公式算法p 编辑:程序博客网 时间:2024/06/06 09:56
//方法一:时间复杂度O(n2),空间复杂度O(n)#include<bits/stdc++.h>using namespace std;int main(){    string a,b;    int dp[100000];    while(cin>>a>>b)    {        memset(dp,0,sizeof(dp));        int Max=0;        for(int i=1; i<=a.size(); i++)            for(int j=b.size(); j>=1; j--) //逆序                if(a[i-1]==b[j-1])                {                    dp[j]=dp[j-1]+1;                    if(dp[j]>Max)Max=dp[j];                }                else dp[j]=0;//此处改为dp[j]=dp[j-1];则变为最长公共子序列        cout<<Max<<endl;    }    return 0;}//方法二:时间复杂度O(n2),空间复杂度O(n2)#include<bits/stdc++.h>using namespace std;int main(){    string a,b;    int dp[1000][1000];    while(cin>>a>>b)    {        memset(dp,0,sizeof(dp));        int Max=0;        for(int i=1; i<=a.size(); i++)            for(int j=1; j<=b.size(); j++) //顺序                if(a[i-1]==b[j-1])                {                    dp[i][j]=dp[i-1][j-1]+1;                    if(dp[i][j]>Max)Max=dp[i][j];                }                else dp[i][j]=0;//此处改为dp[j]=dp[j-1];则变为最长公共子序列        cout<<Max<<endl;    }    return 0;}

原创粉丝点击