Advertisement
Singasking

Untitled

Jul 20th, 2023
725
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     string shortestCommonSupersequence(string s1, string s2) {
  4.  
  5.         vector<vector<int>> dp(s1.length() + 1, vector<int>(s2.length() + 1, 0));
  6.  
  7.         for (int i = 0; i <= s1.length(); i++) dp[i][s2.length()] = s1.length() - i;
  8.         for (int i = 0; i <= s2.length(); i++) dp[s1.length()][i] = s2.length() - i;
  9.  
  10.         for (int i1 = s1.length() - 1; i1 >= 0; i1--) {
  11.             for (int i2 = s2.length() - 1; i2 >= 0; i2--) {
  12.                 if (s1[i1] == s2[i2]) {
  13.                     dp[i1][i2] = 1 + dp[i1 + 1][i2 + 1];
  14.                  //   mapx[{i1, i2}] = s1[i1];
  15.                 } else {
  16.                     int t1 = dp[i1 + 1][i2];
  17.                     int t2 = dp[i1][i2 + 1];
  18.                     if (t1 < t2) {
  19.                       //  mapx[{i1, i2}] = s1[i1];
  20.                     } else {
  21.                       //  mapx[{i1, i2}] = s2[i2];
  22.                     }
  23.                     dp[i1][i2] = min(t1, t2);
  24.                 }
  25.             }
  26.         }
  27.  
  28.         string ans = "";
  29.         int m = s1.length();
  30.         int n = s2.length();
  31.         int i = 0, j = 0;
  32.  
  33.         while (i < m && j < n) {
  34.             if (s1[i] == s2[j]) {
  35.                 ans += s1[i];
  36.                 i += 1;
  37.                 j += 1;
  38.             } else {
  39.                 if (dp[i + 1][j] < dp[i][j + 1]) {
  40.                     ans += s1[i];
  41.                     i += 1;
  42.                 } else {
  43.                     ans += s2[j];
  44.                     j += 1;
  45.                 }
  46.             }
  47.         }
  48.  
  49.         while (i < m) {
  50.             ans += s1[i];
  51.             i += 1;
  52.         }
  53.  
  54.         while (j < n) {
  55.             ans += s2[j];
  56.             j += 1;
  57.         }
  58.  
  59.         return ans;
  60.     }
  61. };
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement