
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