Problem of the day
You are given a string ‘S’ of length ‘N’ which consists of digits from 0 to 9 only. If the mapping of characters from a to z is like a = 1, b = 2, c = 3…. Z = 26. You need to convert the given string of digits into the string of characters using the mapping.
Print all the possible strings that can be generated from the given string ‘S’. Print the strings in non-decreasing sorted lexicographical order.
Example:‘S’ = “112”.
Output: [aab, al, kb]
The possible ways to convert the given strings is:
aab => a = 1, a = 1, b = 2,
al => a = 1, l = 12
kb => k = 11, b = 2
Hence, the final array is: [aab, al, kb].
The first line will contain the integer 'T', denoting the number of test cases.
The first line of each test case contains a string ‘S’.
Output format :
For each test case, you don’t need to print anything just return an array of all possible strings sorted in non-decreasing lexicographical order.
Note :
You don't need to print anything. It has already been taken care of. Just implement the given function.
1 <= T <= 10
1 <= S.length <= 20
Sum of length of strings over all test cases <= 20
Time Limit: 1 sec
2
1123
125
aabc aaw alc kbc kw
abe ay le
For the first case:
aabc => a=1, a=1, b=2, c=3
aaw => a=1, a=1, w=23
alc => a=1, l=12, c=3
kbc => k=11, b=2, c=3
kw => k=11, w=23
Sorting the strings in lexicographical order, so the final output is [aabc, aaw, alc, kbc, kw].
For the second case:
abe => a=1, b=2, e=5
le => l=12, e=5
Sorting the strings in lexicographical order, the final output is [abe le].
2
721023
871121
gbjbc gbjw
hgaaba hgaau hgala hgkba hgku
Can you think of any way solution using backtracking?
In this approach, For each character, we may have two possibilities, either we treat it as a single digit to get the character from 1 to 9 or we append the next digit with it. We recursively try all the possible combinations. We can use a set to store all the strings in sorted order.
The steps are as follows:-
// Function to convert a one digit string or two digit string into a character.
Function convertDigitToAlpha(string digit):
// Function to check if the digit string is less than 27 or not.
Function isValid(string& s):
// // Recursive function to get all possible strings.
Function getAllStringsUtil(string& s, int idx, string& curStr, set<string>& ans):
Function getAllStringsUtil(string& s):
O( M * log( M ) ), Where ‘M’ = 2^N and ‘N’ denotes the length of the string.
For each character, we have two choices either treat it as a single digit or as a two-digit. We are recursively finding all the possible strings and in the worst case there will be a 2^’N’ number of strings For each possible string we are inserting it into the set.
Hence the time complexity is O( M * log( M ) ).
O( M ), Where ‘M’ = 2^N and ‘N’ denotes the length of the string.
We are using a set ‘ANS’ to store all the possible strings.
Hence space complexity is O( M ).