Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
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
#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