Maximum number of removals of given subsequence from a string in C++

C++Server Side ProgrammingProgramming

Given the task is to find the maximum number of removals of given subsequence from a string. A string s is given and we have to find the maximum number of subsequence ‘abc’ that can be removed from the string.

Let’s now understand what we have to do using an example:

Input

s = ‘dnabcxy’

Output

1

Explanation − Only one subsequence of ‘abc’ can be found in the given string (‘dnabcxy’), therefore the output is 1.

Input

s = ‘zcabcxabc’

Output

2 (‘zcabcxabc’)

Approach used in the below program as follows

  • In Max() function initialize variables i, a, ab, abc with value = 0 and of type int.

  • Loop from i=0 till I < s.length()

  • Inside the loop check if (s[i] == ‘a’), if so then increment value of a.

  • Else, check if (s[i] == ‘b’), if true then again check if (a > 0). If both conditions are true then decrease value of a by 1 and increment the value of ab.

  • Finally, check if (s[i] == ‘c’), if true then again check if (ab > 0). If both conditions are true then decrease value of ab by 1 and increment the value of abc.

  • Return abc

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int Max(string s){
   int i=0, a=0, ab=0, abc=0;
   for (i = 0; i < s.length(); i++){
      if (s[i] == 'a'){
         a++;
      }
      else if (s[i] == 'b'){
         if (a > 0){
            a--;
            ab++;
         }
      }
      else if (s[i] == 'c'){
         if (ab > 0){
            ab--;
            abc++;
         }
      }
   }
   return abc;
}
//main function
int main(){
   string s = "zcabcxabc";
   cout << Max(s);
   return 0;
}

Output

2
raja
Published on 03-Aug-2020 14:13:34
Advertisements