nikunjsoni

1898

Jun 13th, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int maximumRemovals(string s, string p, vector<int>& removable) {
  4.         int n = removable.size();
  5.         int left = 0, right=n, ans = 0;
  6.         vector<int> masked(s.size()+1);
  7.         while(left<=right){
  8.             int mid = (left+right)/2;  
  9.             for(int i=0; i<s.length(); i++){
  10.                 masked[i] = 0;
  11.             }
  12.             for(int i=0; i<mid; i++)
  13.                 masked[removable[i]] = 1;
  14.  
  15.             if(check(p, s, masked)){
  16.                 ans = mid;
  17.                 left = mid+1;
  18.             }
  19.             else{
  20.                 right = mid-1;
  21.             }
  22.         }
  23.         return ans;
  24.     }
  25.    
  26.     bool check(string t, string s, vector<int> &masked) {
  27.       int n = s.size();
  28.       int m = t.size();
  29.       int j = 0;
  30.       for(int i = 0; i < n; i++){
  31.          if(masked[i]) continue;
  32.          if(t[j] == s[i])
  33.          j++;
  34.          if(j == t.size())
  35.          return true;
  36.       }
  37.       return false;
  38.    }
  39.    
  40. };
Advertisement
Add Comment
Please, Sign In to add comment