Advertisement
newb_ie

Longest Common Subsequence(Solution Print)

Oct 23rd, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int maxN = 1001;
  5. int grid[maxN][maxN];
  6.  
  7. int solve(char s[],char t[],int i,int j,int n,int m) {
  8.     if (i > n or j > m) {
  9.         return 0;
  10.     }
  11.     if (grid[i][j] != -1) {
  12.         return grid[i][j];
  13.     }
  14.     if (s[i] == t[j]) {
  15.         return grid[i][j] = 1 + solve(s,t,i + 1,j + 1,n,m);
  16.     } else {
  17.         return grid[i][j] = max(solve(s,t,i + 1,j,n,m),solve(s,t,i,j + 1,n,m));
  18.     }
  19. }
  20.  
  21. int main () {
  22.      ios::sync_with_stdio(false);
  23.      cin.tie(nullptr);
  24.      cout.tie(nullptr);
  25.      int T = 1;
  26.      //~ cin >> T;
  27.      for (int test_case = 1; test_case <= T; ++test_case) {
  28.          int n,m;
  29.          cin >> n >> m;
  30.          char s[n + 1],t[m + 1];
  31.          for (int i = 1; i <= n; ++i) {
  32.              cin >> s[i];
  33.          }
  34.          for (int i = 1; i <= m; ++i) {
  35.              cin >> t[i];
  36.          }
  37.          for (int i = 1; i <= n; ++i) {
  38.              for (int j = 1; j <= m; ++j) {
  39.                  grid[i][j] = -1;
  40.              }
  41.          }
  42.          solve(s,t,1,1,n,m);
  43.          for (int i = 1; i <= n; ++i) {
  44.              for (int j = 1; j <= m; ++j) {
  45.                  cout << grid[i][j] << " ";
  46.              }
  47.              cout << "\n";
  48.          }
  49.          char lcs[grid[1][1] + 1];
  50.          int i = 1,j = 1;
  51.          int idx = 1;
  52.          while (i <= n and j <= m) {
  53.              if (s[i] == t[j]) {
  54.                  lcs[idx++] = s[i];
  55.                  ++i,++j;
  56.              } else if (grid[i + 1][j] > grid[i][j + 1]) {
  57.                  ++i;
  58.              } else{
  59.                  ++j;
  60.              }
  61.          }
  62.          for (i = 1; i <= grid[1][1]; ++i) {
  63.              cout << lcs[i];
  64.          }
  65.      }
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement