Generating distinct subsequences of a given string in lexicographic order
Last Updated :
10 Mar, 2023
Given a string s, make a list of all possible combinations of letters of a given string S. If there are two strings with the same set of characters, print the lexicographically smallest arrangement of the two strings
For string abc, the list in lexicographic order subsequences are, a ab abc ac b bc c
Examples:
Input : s = "ab"
Output : a ab b
Input : xyzx
Output : x xx xy xyx xyz xyzx xz xzx y
yx yz yzx z zx
The idea is to use a set (which is implemented using self balancing BST) to store subsequences so that duplicates can be tested.
To generate all subsequences, we one by one remove every character and recur for remaining string.
Implementation:
C++
Java
Python 3
def generate(st, s):
if len (s) = = 0 :
return
if s not in st:
st.add(s)
for i in range ( len (s)):
t = list (s).copy()
t.remove(s[i])
t = ''.join(t)
generate(st, t)
return
if __name__ = = "__main__" :
s = "xyz"
st = set ()
generate(st, s)
for i in st:
print (i)
|
C#
using System;
using System.Collections.Generic;
class GFG {
static void generate(HashSet<String> st, String s)
{
if (s.Length == 0) {
return ;
}
if (!st.Contains(s)) {
st.Add(s);
for ( int i = 0; i < s.Length; i++) {
String t = s;
t = t.Substring(0, i) + t.Substring(i + 1);
generate(st, t);
}
}
return ;
}
public static void Main(String[] args)
{
String s = "xyz" ;
HashSet<String> st = new HashSet<String>();
generate(st, s);
foreach (String str in st)
{
Console.WriteLine(str);
}
}
}
|
Javascript
<script>
function generate(st,s){
if (s.length == 0)
return st;
if (!st.has(s)) {
st.add(s);
for (let i = 0; i < s.length; i++) {
let t = s;
t = t.substr(0, i) + t.substr(i + 1);
st = generate(st, t);
}
}
return st;
}
let s = "xyz" ;
let st = new Set();
st = generate(st, s);
let str = '' ;
console.log(st)
for (item of st.values())
str += item + '<br> '
document.write(str);
</script>
|
Output
x
xy
xyz
xz
y
yz
z
Time Complexity: O(nn)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...