AlenAntonelli

LCS (OP)

Jun 22nd, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #define izqui 1
  4. #define arrib 2
  5. #define diago 3
  6.  
  7. using namespace std;
  8.  
  9. string LCS (string &a, string &b)
  10. {
  11.     vector< vector<int> > m, p;
  12.    
  13.     int ta = a.size();
  14.     int tb = b.size();
  15.    
  16.     m = vector< vector<int> > (ta+1, vector<int> (tb+1, 0) );
  17.     p = vector< vector<int> > (ta+1, vector<int> (tb+1) );
  18.    
  19.     for (int i=1; i<=ta; i++)
  20.     {
  21.         for (int j=1; j<=tb; j++)
  22.         {
  23.             if ( a[i-1] == b[j-1] )
  24.             {
  25.                 m[i][j] = m[i-1][j-1] + 1;
  26.                 p[i][j] = diago;
  27.             }
  28.             else
  29.             {
  30.                 if (m[i-1][j] > m[i][j-1])
  31.                 {
  32.                     m[i][j] = m[i-1][j];
  33.                     p[i][j] = arrib;
  34.                 }
  35.                 else
  36.                 {
  37.                     m[i][j] = m[i][j-1];
  38.                     p[i][j] = izqui;
  39.                 }
  40.             }
  41.         }
  42.     }
  43.    
  44.     string lcs;
  45.     int i=ta, j=tb;
  46.     while( m[i][j] )
  47.     {
  48.         if (p[i][j]==diago)
  49.         {
  50.             lcs = a[i-1] + lcs;
  51.             i--, j--;
  52.         }
  53.         else if ( p[i][j] == arrib )
  54.             i--;
  55.         else if ( p[i][j] == izqui )
  56.             j--;
  57.     }
  58.    
  59.     return lcs;
  60. }
  61.  
  62. int main()
  63. {
  64.     string a, b;
  65.    
  66.     cin>>a>>b;
  67.     cout<<LCS(a,b);
  68.    
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment