using namespace std;char a[2001],b[2001];int ans[2001][2_2076: 【lcs模板】最长公共子序列">
赞
踩
题目描述
一个字符串A的子序列被定义成从A中顺次选出若干个字符构成的序列。如A=“cdaad" ,顺次选1,3,5个字符就构成子序列" cad" ,现给定两个字符串,求它们的最长共公子序列。
输入
第一行两个字符串用空格分开。
输出
最长子序列的长度。
样例输入
abccd aecd
样例输出
3
提示
两个串的长度均小于2000
#include<bits/stdc++.h> using namespace std; char a[2001],b[2001]; int ans[2001][2001]; int main() { scanf("%s %s",a,b); int num1=strlen(a); int num2=strlen(b); for(int i=1;i<=num1;i++) { for(int j=1;j<=num2;j++) { ans[i][j]=max(ans[i-1][j],ans[i][j-1]); if(a[i-1]==b[j-1]) { ans[i][j]=max(ans[i-1][j-1]+1,ans[i][j]); } } } printf("%d",ans[num1][num2]); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。