讨论 / 简洁明了的C++
1614011245 2019-07-31 22:46:54
点我顶贴 收藏 删除
#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<iostream>

#include<stack>

using namespace std;

const int N=1e5+5;

char s1[N],s2[N];

int dp[1500][1500];

int main(){

scanf("%s %s",s1,s2);

int len1=strlen(s1);

int len2=strlen(s2);

int ans=0;

for(int i=1;i<=len1;i++){

for(int j=1;j<=len2;j++){

if(s1[i-1]==s2[j-1])

dp[i][j]=dp[i-1][j-1]+1;

ans=max(ans,dp[i][j]);

}

}

//printf("%d\n",ans);

stack<char>ss;

int p1=0,p2=0,leap=0;

for(int i=0;i<=len1&&!leap;i++)

for(int j=0;j<=len2;j++)

if(dp[i][j]==ans){

p1=i;

p2=j;

leap=1;

break;

}

while(p1>0&&p2>0){

if(dp[p1][p2])

ss.push(s1[p1-1]);

else break;

p1--;

p2--;

}

while(!ss.empty()){

printf("%c",ss.top());

ss.pop();

}

return 0;

}

/*

A B C D E

A 0 0 0 0 0 0

B 0 1 0 0 0 0

D 0 0 2 0 0 0

E 0 0 0 0 1 0

C 0 0 0 0 0 2

0 0 0 1 0 0

*/

查看更多回复
提交回复