Advertisement
SalmaYasser

Untitled

Jan 3rd, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. class Solution {
  2. public:
  3. string minWindow(string S, string T) {
  4.  
  5. vector <int> starts;
  6. int res_len = INT_MAX;
  7. int res_s = INT_MAX;
  8. for (int i= 0 ; i < S.size(); i++)
  9. {
  10. if (S[i] == T[0])
  11. starts.push_back(i);
  12. }
  13.  
  14.  
  15. for (int i = 0 ; i < starts.size(); i++)
  16. {
  17. int s = starts[i];
  18. int e = s + 1;
  19. int t = 1;
  20.  
  21. for ( ; e < S.size() && t < T.size();)
  22. {
  23. if (S[e] == T[t])
  24. t++;
  25. e++;
  26. }
  27. if (t != T.size())
  28. continue;
  29.  
  30. if (e - s < res_len)
  31. {
  32. res_len = e - s ;
  33. res_s = s;
  34. }
  35.  
  36. }
  37. return res_len == INT_MAX ? "":S.substr(res_s,res_len);
  38. }
  39. };
  40.  
  41. O(S*T)
  42.  
  43. class Solution {
  44. public:
  45. string minWindow(string S, string T) {
  46.  
  47. vector <int> starts;
  48. vector<int> chars(26, -1);
  49. vector<vector<int>> nxtX(S.size());
  50. for(int i = S.size()-1; i >= 0; i--) {
  51. chars[S[i]-'a'] = i;
  52. nxtX[i] = chars;
  53. }
  54.  
  55. int res_len = INT_MAX;
  56. int res_s = INT_MAX;
  57. for (int i= 0 ; i < S.size(); i++)
  58. {
  59. if (S[i] == T[0])
  60. starts.push_back(i);
  61. }
  62.  
  63.  
  64. for (int i = 0 ; i < starts.size(); i++)
  65. {
  66. int s = starts[i];
  67. int e = s + 1;
  68. int t = 1;
  69. for ( ; e < S.size() && t < T.size();)
  70. {
  71. e = nxtX[e][T[t]-'a'];
  72. if(!~e) break;
  73. t++;
  74. e++;
  75. }
  76.  
  77. if (t != T.size())
  78. continue;
  79.  
  80. if (e - s < res_len)
  81. {
  82. res_len = e - s ;
  83. res_s = s;
  84. }
  85.  
  86. }
  87. return res_len == INT_MAX ? "":S.substr(res_s,res_len);
  88. }
  89. };
  90.  
  91. class Solution {
  92. public:
  93. string minWindow(string S, string T) {
  94.  
  95. vector < vector <int> > dp (S.size(), vector <int> (T.size(), -1));
  96.  
  97. for (int i = 0 ; i < S.size(); i++)
  98. {
  99. if (S[i]== T[0])
  100. {
  101. dp[i][0] = i;
  102. }
  103. }
  104. int res_len = INT_MAX;
  105. int res_start = -1;
  106.  
  107. for (int i = 1; i < T.size(); i++)
  108. {
  109. int start = -1;
  110. for (int j = 0 ; j < S.size(); j++)
  111. {
  112. if (S[j] == T[i])
  113. {
  114. dp[j][i] = start;
  115. }
  116.  
  117. start = max (start, dp[j][i - 1]);
  118.  
  119. }
  120. }
  121.  
  122. int l = T.size() - 1;
  123. for (int j = 0 ; j < S.size(); j++)
  124. {
  125. if (dp[j][l] != -1 && (j - dp[j][l] + 1 < res_len))
  126. {
  127. res_len = j - dp[j][l] + 1 ;
  128. res_start = dp[j][l];
  129. }
  130. }
  131.  
  132. return res_start == -1 ? "" : S.substr(res_start, res_len);
  133. }
  134.  
  135. O(S*T
  136. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement