Given string str, the task is to count the maximum number of possible operations that can be performed on str. An operation consists of taking a sub-sequence ‘gks’ from the string and removing it from the string.
Examples:
Input: str = “ggkssk”
Output: 1
Explanation: After 1st operation: str = “gsk”
No further operation can be performed.Input: str = “kgs”
Output: 0
Approach:
- Take three variables g, gk, and gks which will store the occurrence of the sub-sequences ‘g’, ‘gk’, and ‘gks’ respectively.
- Traverse the string character by character:
- If str[i] = ‘g’ then update g = g + 1.
- If str[i] = ‘k’ and g > 0 then update g = g – 1 and gk = gk + 1 as previously found ‘g’ now contributes to the sub-sequence ‘gk’ along with the current ‘k’.
- Similarly, if str[i] = ‘s’ and gk > 0 then update gk = gk – 1 and gks = gks + 1.
- Print the value of gks in the end.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;// Function to return max possible operation// of the given type that can be performed on strint maxOperations(string str){ int i, g, gk, gks; i = g = gk = gks = 0; for (i = 0; i < str.length(); i++) { if (str[i] == 'g') { // Increment count of sub-sequence 'g' g++; } else if (str[i] == 'k') { // Increment count of sub-sequence 'gk' // if 'g' is available if (g > 0) { g--; gk++; } } else if (str[i] == 's') { // Increment count of sub-sequence 'gks' // if sub-sequence 'gk' appeared previously if (gk > 0) { gk--; gks++; } } } // Return the count of sub-sequence 'gks' return gks;}// Driver codeint main(){ string a = "ggkssk"; cout << maxOperations(a); return 0;} |
Java
// Java implementation of the approachclass GFG{// Function to return max possible // operation of the given type that // can be performed on str static int maxOperations(String str) { int i, g, gk, gks; i = g = gk = gks = 0; for (i = 0; i < str.length(); i++) { if (str.charAt(i) == 'g') { // Increment count of sub-sequence 'g' g++; } else if (str.charAt(i) == 'k') { // Increment count of sub-sequence 'gk' // if 'g' is available if (g > 0) { g--; gk++; } } else if (str.charAt(i) == 's') { // Increment count of sub-sequence 'gks' // if sub-sequence 'gk' appeared previously if (gk > 0) { gk--; gks++; } } } // Return the count of sub-sequence 'gks' return gks; } // Driver code public static void main(String args[]) { String a = "ggkssk"; System.out.print(maxOperations(a));} }// This code is contributed // by Akanksha Rai |
Python 3
# Python 3 implementation of the approach# Function to return max possible operation# of the given type that can be performed # on strdef maxOperations( str): i, g, gk, gks = 0, 0, 0, 0 for i in range(len(str)) : if (str[i] == 'g') : # Increment count of sub-sequence 'g' g += 1 elif (str[i] == 'k') : # Increment count of sub-sequence # 'gk', if 'g' is available if (g > 0) : g -= 1 gk += 1 elif (str[i] == 's') : # Increment count of sub-sequence 'gks' # if sub-sequence 'gk' appeared previously if (gk > 0) : gk -= 1 gks += 1 # Return the count of sub-sequence 'gks' return gks# Driver codeif __name__ == "__main__": a = "ggkssk" print(maxOperations(a))# This code is contributed by ita_c |
C#
// C# implementation of the approach using System ;public class GFG{ // Function to return max possible operation // of the given type that can be performed on str static int maxOperations(string str) { int i, g, gk, gks; i = g = gk = gks = 0; for (i = 0; i < str.Length; i++) { if (str[i] == 'g') { // Increment count of sub-sequence 'g' g++; } else if (str[i] == 'k') { // Increment count of sub-sequence 'gk' // if 'g' is available if (g > 0) { g--; gk++; } } else if (str[i] == 's') { // Increment count of sub-sequence 'gks' // if sub-sequence 'gk' appeared previously if (gk > 0) { gk--; gks++; } } } // Return the count of sub-sequence 'gks' return gks; } // Driver code public static void Main() { string a = "ggkssk"; Console.WriteLine(maxOperations(a)) ; } } |
PHP
<?php// PHP implementation of the approach// Function to return max possible operation// of the given type that can be performed on strfunction maxOperations($str){ $i = $g = $gk = $gks = 0; for ($i = 0; $i < strlen($str); $i++) { if ($str[$i] == 'g') { // Increment count of sub-sequence 'g' $g++; } else if ($str[$i] == 'k') { // Increment count of sub-sequence 'gk' // if 'g' is available if ($g > 0) { $g--; $gk++; } } else if ($str[$i] == 's') { // Increment count of sub-sequence 'gks' // if sub-sequence 'gk' appeared previously if ($gk > 0) { $gk--; $gks++; } } } // Return the count of sub-sequence 'gks' return $gks;}// Driver code$a = "ggkssk";echo maxOperations($a);// This code is contributed// by Akanksha Rai?> |
Javascript
<script>// Javascript implementation of the approach// Function to return max possible // operation of the given type that // can be performed on str function maxOperations(str){ let i, g, gk, gks; i = g = gk = gks = 0; for (i = 0; i < str.length; i++) { if (str[i] == 'g') { // Increment count of sub-sequence 'g' g++; } else if (str[i] == 'k') { // Increment count of sub-sequence 'gk' // if 'g' is available if (g > 0) { g--; gk++; } } else if (str[i] == 's') { // Increment count of sub-sequence 'gks' // if sub-sequence 'gk' appeared previously if (gk > 0) { gk--; gks++; } } } // Return the count of sub-sequence 'gks' return gks; }// Driver code let a = "ggkssk"; document.write(maxOperations(a));// This code is contributed by avanitrachhadiya2155</script> |
1
Time Complexity: O(n)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Find More on that Topic: geeksforgeeks.org/maximum-number-of-removals-of-given-subsequence-from-a-string/ […]
… [Trackback]
[…] Find More here on that Topic: geeksforgeeks.org/maximum-number-of-removals-of-given-subsequence-from-a-string/ […]
… [Trackback]
[…] There you can find 3434 more Info on that Topic: geeksforgeeks.org/maximum-number-of-removals-of-given-subsequence-from-a-string/ […]