# Generate a string of size N whose each substring of size M has exactly K distinct characters

• Difficulty Level : Medium
• Last Updated : 30 Apr, 2021

Given 3 positive integers N, M, and K. the task is to construct a string of length N consisting of lowercase letters such that each substring of length M having exactly K distinct letters.
Examples:

Input: N = 5, M = 2, K = 2
Explanation:
Each substring of size 2 “ab”, “ba”, “ad”, “de” have 2 distinct letters.
Input: N = 7, M = 5, K = 3
Output: abcaaab
Explanation:
Each substring of size 5 “tleel”, “leelt”, “eelte” have 3 distinct letters.

Approach: In a string of size N, every substring of size M must contain exactly K distinct letters-

• Construct a string having K distinct alphabets starting from ‘a’ to ‘z’ up to the size of M and put the rest of letters like ‘a’..
• Since we have generated a string of size M with K distinct value. Now, keep repeating it till we reach string size of N.

Below is the implementation of the above approach:

## C++

 // C++ program to generate a string of size N// whose each substring of size M// has exactly K distinct characters #include using namespace std; // Function to generate the stringstring generateString(int N, int M, int K){     // Declare empty string    string s = "";     // counter for M    int cnt1 = 0;     // counter for K    int cnt2 = 0;     // Loop to generate string size of N    for (int i = 0; i < N; i++) {        cnt1++;        cnt2++;         // Generating K distinct        // letters one by one        if (cnt1 <= M) {            if (cnt2 <= K) {                s = s + char(96 + cnt1);            }             // After generating b distinct letters,            // append rest a-b letters as 'a'            else {                s = s + 'a';            }        }         // Reset the counter value        // and repeat the process        else {            cnt1 = 1;            cnt2 = 1;            s = s + 'a';        }    }     // return final result string    return s;} // Driver codeint main(){    int N = 7, M = 5, K = 3;     cout << generateString(N, M, K) << endl;     return 0;}

## Java

 // Java program to generate a String of size N// whose each subString of size M// has exactly K distinct charactersimport java.util.*;class GFG{ // Function to generate the Stringstatic String generateString(int N, int M, int K){     // Declare empty String    String s = "";     // counter for M    int cnt1 = 0;     // counter for K    int cnt2 = 0;     // Loop to generate String size of N    for (int i = 0; i < N; i++)    {        cnt1++;        cnt2++;         // Generating K distinct        // letters one by one        if (cnt1 <= M)        {            if (cnt2 <= K)            {                s = s + (char)(96 + cnt1);            }             // After generating b distinct letters,            // append rest a-b letters as 'a'            else            {                s = s + 'a';            }        }         // Reset the counter value        // and repeat the process        else        {            cnt1 = 1;            cnt2 = 1;            s = s + 'a';        }    }     // return final result String    return s;} // Driver codepublic static void main(String[] args){    int N = 7, M = 5, K = 3;     System.out.println(generateString(N, M, K));}} // This code is contributed by 29AjayKumar

## Python3

 # Python3 program to generate a string of size N# whose each substring of size M# has exactly K distinct characters# Function to generate the stringdef generateString(N, M, K):     # Declare empty string    s = ""     # counter for M    cnt1 = 0     # counter for K    cnt2 = 0     # Loop to generate string size of N    for i in range (N):        cnt1 += 1        cnt2 += 1         # Generating K distinct        # letters one by one        if (cnt1 <= M):            if (cnt2 <= K):                s = s + chr(96 + cnt1)                         # After generating b distinct letters,            # append rest a-b letters as 'a'            else:                s = s + 'a'         # Reset the counter value        # and repeat the process        else:            cnt1 = 1            cnt2 = 1            s = s + 'a'     # return final result string    return s # Driver codeif __name__ == "__main__":     N = 7    M = 5    K = 3    print (generateString(N, M, K))     # This code is contributed by Chitranayal

## C#

 // C# program to generate a String of// size N whose each subString of size// M has exactly K distinct charactersusing System; class GFG{ // Function to generate the Stringstatic String generateString(int N, int M, int K){     // Declare empty String    String s = "";     // Counter for M    int cnt1 = 0;     // Counter for K    int cnt2 = 0;     // Loop to generate String size of N    for(int i = 0; i < N; i++)    {       cnt1++;       cnt2++;               // Generating K distinct       // letters one by one       if (cnt1 <= M)       {           if (cnt2 <= K)           {               s = s + (char)(96 + cnt1);           }                       // After generating b distinct letters,           // append rest a-b letters as 'a'           else           {               s = s + 'a';           }       }               // Reset the counter value       // and repeat the process       else       {           cnt1 = 1;           cnt2 = 1;           s = s + 'a';       }    }         // Return readonly result String    return s;} // Driver codepublic static void Main(String[] args){    int N = 7, M = 5, K = 3;     Console.WriteLine(generateString(N, M, K));}} // This code is contributed by Rajput-Ji

## Javascript



Output:

abcaaab

Time complexity: O(N)
Space complexity: O(1)

My Personal Notes arrow_drop_up