nikunjsoni

943

May 23rd, 2021
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     string shortestSuperstring(vector<string>& A) {
  4.         int n = A.size();
  5.         // dp[mask][i] : min superstring made by strings in mask,
  6.         // and the last one is A[i]
  7.         vector<vector<string>> dp(1<<n, vector<string>(n));
  8.         vector<vector<int>> overlap(n, vector<int>(n,0));
  9.        
  10.         // 1. calculate overlap for A[i]+A[j].substr(?)
  11.         for(int i=0; i<n; ++i)
  12.             for(int j=0; j<n; ++j)
  13.                 if(i != j){
  14.                     for(int k = min(A[i].size(), A[j].size()); k>0; --k)
  15.                         if(A[i].substr(A[i].size()-k) == A[j].substr(0,k)){
  16.                             overlap[i][j] = k;
  17.                             break;
  18.                         }
  19.                 }
  20.        
  21.         // 2. set inital val for dp
  22.         for(int i=0; i<n; ++i)
  23.             dp[1<<i][i] += A[i];
  24.        
  25.         // 3. fill the dp
  26.         for(int mask=1; mask<(1<<n); ++mask){
  27.             for(int j=0; j<n; ++j){
  28.                 if((mask&(1<<j))){
  29.                     for(int i=0; i<n; ++i)
  30.                         if(i!=j && (mask&(1<<i))){
  31.                             string tmp = dp[mask^(1<<j)][i] + A[j].substr(overlap[i][j]);
  32.                             if(dp[mask][j].empty() || tmp.size() < dp[mask][j].size())
  33.                                 dp[mask][j] = tmp;
  34.                         }
  35.                 }
  36.             }
  37.         }
  38.        
  39.         // 4. get the result
  40.         int last = (1<<n)-1;
  41.         string res = dp[last][0];
  42.         for(int i=1; i<n; ++i)
  43.             if(dp[last][i].size() < res.size())
  44.                 res = dp[last][i];
  45.            
  46.         return res;
  47.     }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment