
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
Lexicographically Smallest String of Maximum Length from First K Alphabets
In this problem, we need to generate a lexicographically smallest string using the first K characters of alphabets so that it doesn't contain any repeated substring. We can generate a string so that all substrings of length 2 are unique. So, if all substrings of length 2 are unique, all substrings of length 3 or more are also unique.
Problem statement - We have given a positive integer K. We need to generate a new string using the first K alphabets so that generated string can't contain any repeated substring of length 2 or more and is lexicographically smallest.
Sample examples
Input- K = 1
Output- ?aa'
Explanation- We can generate ?aa' using only 'a' so that the resultant string contains all unique substrings of length 2 or more.
Input- K = 2
Output- ?aabba'
Explanation- The ?aabba' is the lexicographically smallest string that we can generate using ?a' and ?b' only.
Input- K = 4
Output- ?aabacadbbcbdccdda'
Explanation- The ?aabacadbbcbdccdda' is the smallest string we can generate using the first 4 alphabetical characters.
Approach 1
This approach will use two nested loops to generate a new string containing unique substrings of length 2.
Algorithm
Initialize the ?str' variable with the empty string.
Iterate in the range 97 to 97 + k, where 97 is the ASCII value of the ?a'.
Append the current character in the ?str'.
Iterate in the range I to 97 + k.
Convert i and j to character value and append to the str.
When iteration of both nested loops completes, append ?a' at the end of the str.
Return str, which is a newly generated string using the first K alphabets.
Example
#include <bits/stdc++.h> using namespace std; // function to return the lexicographically smallest string of length K string getTheString(int K){ // to store the resultant string string str = ""; // Iterating over the range [97, 97 + K] for (int i = 97; i < 97 + K; i++){ // appending the ith character to the string str = str + char(i); // Create a substring of length 2 consisting of the ith character and the jth character for (int j = i + 1; j < 97 + K; j++){ // appending i and j to str str += char(i); str += char(j); } } // appending the last character to the string str += char(97); // return the resultant string return str; } int main(){ int K = 2; cout << "The lexicographically smallest string is " << getTheString(K); return 0; }
Output
The lexicographically smallest string is aabba
Time complexity - O(K * K) as both loop traverse the first K characters.
Space complexity - O(K * K) as we store the newly generated string to the ?str' variable.
In the above code, we generate all the unique substrings of length 2 using the first k character. We need to create unique pairs of characters to create a unique substring of length 2, and that logic is followed in the solution approach.