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
Output: abade
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 <bits/stdc++.h> using namespace std; // Function to generate the string 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 code int 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 characters import java.util.*; class GFG{ // Function to generate the String static 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 code public 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 string def 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 code if __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 characters using System; class GFG{ // Function to generate the String static 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 code public 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
<script> // Javascript program to generate // a String of size N // whose each subString of size M // has exactly K distinct characters // Function to generate the String function generateString(N,M,K) { // Declare empty string let s = "" ; // counter for M let cnt1 = 0; // counter for K let cnt2 = 0; // Loop to generate string size of N for (let i = 0; i < N; i++) { cnt1++; cnt2++; // Generating K distinct // letters one by one if (cnt1 <= M) { if (cnt2 <= K) { s = s + String.fromCharCode(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 code let N = 7, M = 5, K = 3; document.write( generateString(N, M, K)) // This code is contributed // by avanitrachhadiya2155 </script> |
abcaaab
Time complexity: O(N)
Space complexity: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!