求最长公共子序列(空间优化)

#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 105;
char a[maxn],b[maxn];
int dp[2][maxn];
int main(){
    while(cin>>a>>b){
        int la = strlen(a),lb = strlen(b);
        int cur,pre; 
        cur = 1;
        pre = 0;
        for(int i=0;i<=lb;i++)dp[0][i] = 0;
        dp[1][0] = 0;
        for(int i=1;i<=la;i++){
            for(int j=1;j<=lb;j++){
                if(a[i]==b[j]){
                    dp[cur][j] = dp[pre][j-1] + 1;
                }
                else{
                    dp[cur][j] = max(dp[cur][j-1],dp[pre][j]);
                }
            }
            swap(cur,pre);
        } 
        cout<<dp[pre][lb]<<endl;
    }
    return 0;
} 

 

posted @ 2021-07-22 16:11  智人心  阅读(94)  评论(0)    收藏  举报