Codeup-问题 A: 最长公共子序列
生活随笔
收集整理的這篇文章主要介紹了
Codeup-问题 A: 最长公共子序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給你一個序列X和另一個序列Z,當Z中的所有元素都在X中存在,并且在X中的下標順序是嚴格遞增的,那么就把Z叫做X的子序列。
例如:Z=<a,b,f,c>是序列X=<a,b,c,f,b,c>的一個子序列,Z中的元素在X中的下標序列為<1,2,4,6>。
現給你兩個序列X和Y,請問它們的最長公共子序列的長度是多少?
輸入
輸入包含多組測試數據。每組輸入占一行,為兩個字符串,由若干個空格分隔。每個字符串的長度不超過100。
輸出
對于每組輸入,輸出兩個字符串的最長公共子序列的長度。
樣例輸入
abcfbc abfcab programming contest abcd mnp樣例輸出
4 2 0?
?
?
AC:
#include <iostream> #include <cstring> #include <algorithm> using namespace std;const int maxn = 105; char A[maxn], B[maxn]; int dp[maxn][maxn]; int n;int main() {while(scanf("%s", A+1) != EOF){scanf("%s", B+1);int lenA = strlen(A+1);int lenB = strlen(B+1);for(int i = 0; i <= lenA; i++){dp[i][0] = 0;}for(int j = 0 ; j <= lenB; j++){dp[0][j] = 0;}for(int i = 1; i <= lenA; i++){for(int j = 1; j <= lenB; j++){if(A[i] == B[j]){dp[i][j] = dp[i-1][j-1] + 1;}else{dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}}}printf("%d\n", dp[lenA][lenB]);}return 0; }?
總結
以上是生活随笔為你收集整理的Codeup-问题 A: 最长公共子序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeup墓地-问题 A: 最长上升子
- 下一篇: Codeup-问题 A: 【字符串】最长