Maximum count of substrings of length K consisting of same characters in C++


Given the task is to find the maximum count of substrings of length K consisting of same characters. Given a string s and another integer K, we have to count the occurrence of sub-strings of size K that have same characters.

Out of the sub-strings that are found, we have to choose the sub-string occurring the maximum number of time.

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

Input

s = ”tuuxyyuuc”, K = 2

Output

2

Explanation

Here the sub-strings of length 2 and having same characters are: “uu” and “yy” but as it is seen that “yy” occurs only 1 time and “uu” is present 2 times. Therefore the output becomes 2.

Input

s = “hhigggff”, K = 3

Output

1

Approach used in the below program as follows

  • In Max() function, initialize int ans = 0 to store final answer, size = str.size() to store size of string and declare char c to store the characters we need to check.

  • Loop from j = 0 till j < 26 and put c = ‘a’ + j as we will check for each character.

  • Initialize variable int CurrCh = 0 for storing the occurrence of sub-array containing the current character.

  • Loop from i = 0 till i <= size – K and check if (str[i] != c). If so, then add continue; statement.

  • Initialize count = 0 to store length of the sub-array of the current character.

  • Create a while loop with condition (i < size && count != K && str[i] == c) and inside the loop increment i and count. Outside the while loop decrease i by 1.

  • Check if (count == K). If so, then increment CurrCh.

  • Close the second For loop and update the value of ans by putting ans = max(ans, CurrCh).

  • Finally close the first For loop and return ans.

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int Max(string str, int K){
   int ans = 0, size = str.size();
   char c;
   //Checking for all characters
   for (int j = 0; j < 26; j++){
      c = 'a' + j;
      //checking for current character
      int CurrCh = 0;
      for (int i = 0; i <= size - K; i++){
         if (str[i] != c)
            continue;
         //Counting the size of sub-string
         int count = 0;
         while (i < size && count != K && str[i] == c){
            i++;
            count++;
         }
         i--;
         //Increment CurrCh if sub-string has length K
         if (count == K)
            CurrCh++;
      }
      //Update ans
      ans = max(ans, CurrCh);
   }
   return ans;
}
//main function
int main(){
   string str = "tuuuxyuuu";
   int K = 3;
   cout << Max(str, K);
   return 0;
}

Output

2

Updated on: 04-Aug-2020

246 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements