题意简述:
求两个字符串的最长公共子序列的长度.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 508
using namespace std;
int dp[2][maxn];
char s1[maxn], s2[maxn];
int main() {
int i, j, l1, l2;
while(~scanf("%s%s", s1, s2)) {
l1 = strlen(s1);
l2 = strlen(s2);
for(i = 1; i <= l2; i++)
dp[0][i] = 0;
int v = 0;
for(i = 0; i < l1; i++) {
for(j = 1; j <= l2; j++)
dp[v^1][j] = 0;
for(j = 0; j < l2; j++)
if(s1[i] == s2[j])
dp[v^1][j+1] = dp[v][j] + 1;
else
dp[v^1][j+1] = max(dp[v][j+1], dp[v^1][j]);
v ^= 1;
}
cout<<dp[v][l2]<<endl;
}
return 0;
}
我就画张图:
输入 bdcaba abcbdab