Advertisement
nikunjsoni

727-2

Jun 7th, 2021
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     string minWindow(string s, string t) {
  4.         int slen = s.length(), tlen = t.length();
  5.         vector<vector<int>> dp(tlen+1, vector(slen+1, 0));
  6.        
  7.         for(int i=0; i<=slen; i++)
  8.             dp[0][i] = i+1;
  9.        
  10.         for(int i=1; i<=tlen; i++)
  11.             for(int j=1; j<=slen; j++)
  12.                 dp[i][j] = (t[i-1] == s[j-1]) ? dp[i-1][j-1] : dp[i][j-1];
  13.        
  14.         /*
  15.             For s="abcdebdde" t="bde"
  16.             dp table will be...
  17.             1 2 3 4 5 6 7 8 9 10
  18.             0 0 2 2 2 2 6 6 6 6
  19.             0 0 0 0 2 2 2 6 6 6
  20.             0 0 0 0 0 2 2 2 2 6
  21.         */
  22.        
  23.         int start = 0, len = slen+1;
  24.         for(int j=1; j<=slen; j++){
  25.             if(dp[tlen][j] != 0){
  26.                 if(j-dp[tlen][j]+1 < len){
  27.                     start = dp[tlen][j]-1;
  28.                     len = j-dp[tlen][j]+1;
  29.                 }
  30.             }
  31.         }
  32.  
  33.         return (len == slen+1) ? "" : s.substr(start, len);
  34.     }
  35. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement