Wednesday, October 31, 2012

Longest Common Subsequence (LCS)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
#define siz 1050

int res[siz][siz];

int lcs(string as, string bs){
    int m,n;
    m=as.size();
    n=bs.size();

    for(int i=0;i<=m;i++) res[i][0]=0;
    for(int j=0;j<=n;j++) res[0][j]=0;

    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(as[i-1]==bs[j-1]) res[i][j]=res[i-1][j-1]+1;
            else res[i][j]=max(res[i][j-1],res[i-1][j]);
        }
    }

    return res[m][n];
}

int main()
{
    string as,bs;

    #ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    #endif

    while(getline(cin,as)&&getline(cin,bs)){
        cout<<lcs(as,bs)<<endl;
    }

    return 0;
}

No comments:

Post a Comment