Find all strings in lexicographic order possible by replacing digits with ‘x’, ‘y’ or ‘z’
Last Updated :
14 Apr, 2023
Given a string str, consisting of lower case English alphabets and digits(0-9), the task is to print all possible strings in lexicographic order that can be formed by replacing each occurrence of a digit with either ‘x‘, ‘y‘ or ‘z‘.
Example:
Input: str = “a1b2”
Output: axbx axby axbz aybx ayby aybz azbx azby azbz
Explanation: These string are the 9 possible strings printed in lexicographic order which can be formed from “a1b2” by replacing all digits with either ‘x’, ‘y’ or ‘z’.
Input: str = “abcdef”
Output: abcdef
Approach: The given problem can be solved using recursion with the help of backtracking. The idea is to create a recursive function, and while iterating the given string, replace each occurrence of a digit with ‘x‘, ‘y‘, and ‘z‘ and recursively call for the remaining string for each of the three strings.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void allPossibleStrings(
string str, string cur, int i)
{
if (str.size() == cur.size()) {
cout << cur << " " ;
return ;
}
if ( isdigit (str[i])) {
allPossibleStrings(
str, cur + "x" , i + 1);
allPossibleStrings(
str, cur + "y" , i + 1);
allPossibleStrings(
str, cur + "z" , i + 1);
}
else {
allPossibleStrings(
str, cur + str[i], i + 1);
}
}
int main()
{
string str = "a1b2" ;
allPossibleStrings(str, "" , 0);
return 0;
}
|
Java
class GFG {
static void allPossibleStrings(
String str, String cur, int i) {
if (str.length() == cur.length()) {
System.out.print(cur + " " );
return ;
}
if (Character.isDigit(str.charAt(i))) {
allPossibleStrings(
str, cur + "x" , i + 1 );
allPossibleStrings(
str, cur + "y" , i + 1 );
allPossibleStrings(
str, cur + "z" , i + 1 );
} else {
allPossibleStrings(
str, cur + str.charAt(i), i + 1 );
}
}
public static void main(String args[]) {
String str = "a1b2" ;
allPossibleStrings(str, "" , 0 );
}
}
|
Python3
def allPossibleStrings( str , cur, i):
if ( len ( str ) = = len (cur)):
print (cur, end = " " )
return
if ( str [i] > = '0' and str [i] < = '9' ):
allPossibleStrings( str , cur + "x" , i + 1 )
allPossibleStrings( str , cur + "y" , i + 1 )
allPossibleStrings( str , cur + "z" , i + 1 )
else :
allPossibleStrings( str , cur + str [i], i + 1 )
if __name__ = = "__main__" :
str = "a1b2"
allPossibleStrings( str , "", 0 )
|
C#
using System;
class GFG
{
static void allPossibleStrings(
string str, string cur, int i)
{
if (str.Length == cur.Length) {
Console.Write(cur + " " );
return ;
}
if (Char.IsDigit(str[i])) {
allPossibleStrings(
str, cur + "x" , i + 1);
allPossibleStrings(
str, cur + "y" , i + 1);
allPossibleStrings(
str, cur + "z" , i + 1);
}
else {
allPossibleStrings(
str, cur + str[i], i + 1);
}
}
public static void Main()
{
string str = "a1b2" ;
allPossibleStrings(str, "" , 0);
}
}
|
Javascript
<script>
function allPossibleStrings(
str, cur, i) {
if (str.length == cur.length) {
document.write(cur + " " );
return ;
}
if (Number.isInteger(parseInt(str[i]))) {
allPossibleStrings(
str, cur + "x" , i + 1);
allPossibleStrings(
str, cur + "y" , i + 1);
allPossibleStrings(
str, cur + "z" , i + 1);
}
else {
allPossibleStrings(
str, cur + str[i], i + 1);
}
}
let str = "a1b2" ;
allPossibleStrings(str, "" , 0);
</script>
|
Output
axbx axby axbz aybx ayby aybz azbx azby azbz
Time Complexity: O(3N)
Auxiliary Space: O(N) where n is the recursion stack space.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...