# Print all subsequences of a string using ArrayList

• Difficulty Level : Medium
• Last Updated : 07 Mar, 2022

Given a string str, the task is to print all the sub-sequences of str
A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.
Examples:

Input: str = “abc”
Output: a b ab c ac bc abc
Input: str = “geek”
Output: g e ge e ge ee gee k gk ek gek ek gek eek geek

Approach: Write a recursive function that prints every sub-sequence of the sub-string starting from the second character str[1, n – 1] after appending the first character of the string str[0] in the beginning of every sub-sequence. Terminating condition will be when the passed string is empty, in that case the function will return an empty arraylist.
Below is the implementation of the above approach:

## C++

 // C++ implementation of the approach#include using namespace std; // Utility function to print the contents// of the Listvoid printList(vector arrL){    arrL.erase(find(arrL.begin(), arrL.end(), ""));    for (int i = 0; i < arrL.size(); i++)        cout << arrL[i] << " ";} // Function to returns the arraylist which contains// all the sub-sequences of strvector getSequence(string str){     // If string is empty    if (str.length() == 0)    {        // Return an empty arraylist        vector empty;        empty.push_back("");        return empty;    }     // Take first character of str    char ch = str[0];     // Take sub-string starting from the    // second character    string subStr = str.substr(1);     // Recursive call for all the sub-sequences    // starting from the second character    vector subSequences = getSequence(subStr);     // Add first character from str in the beginning    // of every character from the sub-sequences    // and then store it into the resultant arraylist    vector res;    for(string val : subSequences)    {        res.push_back(val);        res.push_back(ch + val);    }     // Return the resultant arraylist    return res;}     int main(){    string str = "geek";    printList(getSequence(str));     return 0;} // This code is contributed by rameshtravel07.

## Java

 // Java implementation of the approachimport java.util.ArrayList; public class GFG {     // Utility function to print the contents    // of the ArrayList    static void printArrayList(ArrayList arrL)    {        arrL.remove("");        for (int i = 0; i < arrL.size(); i++)            System.out.print(arrL.get(i) + " ");    }     // Function to returns the arraylist which contains    // all the sub-sequences of str    public static ArrayList getSequence(String str)    {         // If string is empty        if (str.length() == 0) {             // Return an empty arraylist            ArrayList empty = new ArrayList<>();            empty.add("");            return empty;        }         // Take first character of str        char ch = str.charAt(0);         // Take sub-string starting from the        // second character        String subStr = str.substring(1);         // Recursive call for all the sub-sequences        // starting from the second character        ArrayList subSequences =                              getSequence(subStr);         // Add first character from str in the beginning        // of every character from the sub-sequences        // and then store it into the resultant arraylist        ArrayList res = new ArrayList<>();        for (String val : subSequences) {            res.add(val);            res.add(ch + val);        }         // Return the resultant arraylist        return res;    }     // Driver code    public static void main(String[] args)    {        String str = "geek";        printArrayList(getSequence(str));        // System.out.print(getSequence(str));    }}

## Python3

 # Python implementation of the approach # Utility function to print the contents# of the ArrayListdef printArrayList(arrL):    arrL.remove("")    print(*arrL, sep = " ") # Function to returns the arraylist which contains# all the sub-sequences of strdef getSequence(Str):     # If string is empty    if(len(Str) == 0):         # Return an empty arraylist        empty = []        empty.append("")        return empty     # Take first character of str    ch = Str[0]     # Take sub-string starting from the    # second character    subStr = Str[1:]     # Recursive call for all the sub-sequences    # starting from the second character    subSequences = getSequence(subStr)     # Add first character from str in the beginning    # of every character from the sub-sequences    # and then store it into the resultant arraylist    res = []     for val in subSequences:        res.append(val)        res.append(ch + val)     # Return the resultant arraylist    return res # Driver codeStr = "geek"printArrayList(getSequence(Str)) # This code is contributed by avanitrachhadiya2155

## C#

 // C# implementation of the approachusing System;using System.Collections.Generic; class GFG{     // Utility function to print the contents    // of the List    static void printList(List arrL)    {        arrL.Remove("");        for (int i = 0; i < arrL.Count; i++)            Console.Write(arrL[i] + " ");    }     // Function to returns the arraylist which contains    // all the sub-sequences of str    public static List getSequence(String str)    {         // If string is empty        if (str.Length == 0)        {             // Return an empty arraylist            List empty = new List();            empty.Add("");            return empty;        }         // Take first character of str        char ch = str[0];         // Take sub-string starting from the        // second character        String subStr = str.Substring(1);         // Recursive call for all the sub-sequences        // starting from the second character        List subSequences = getSequence(subStr);         // Add first character from str in the beginning        // of every character from the sub-sequences        // and then store it into the resultant arraylist        List res = new List();        foreach (String val in subSequences)        {            res.Add(val);            res.Add(ch + val);        }         // Return the resultant arraylist        return res;    }     // Driver code    public static void Main(String[] args)    {        String str = "geek";        printList(getSequence(str));        // Console.Write(getSequence(str));    }} // This code is contributed by Rohit_ranjan

## Javascript


Output:
g e ge e ge ee gee k gk ek gek ek gek eek geek

Alternate Solution: One by one fix characters and recursively generate all subsets starting from them.

## C++

 // C++ implementation of the approach#include using namespace std; // Function to print all the sub-sequences// of a stringvoid printSubSeq(string sub, string ans){     if (sub.length() == 0) {        cout << "" << ans << " ";        return;    }     // First character of sub    char ch = sub[0];     // Sub-string starting from second    // character of sub    string ros = sub.substr(1);     // Excluding first character    printSubSeq(ros, ans);     // Including first character    printSubSeq(ros, ans + ch);} // Driver codeint main(){    string str = "abc";    printSubSeq(str, "");     return 0;} // This code is contributed by divyesh072019

## Java

 // Java implementation of the approachpublic class sub_sequence {     // Function to print all the sub-sequences    // of a string    public static void printSubSeq(String sub,                                  String ans)    {         if (sub.length() == 0) {            System.out.print("" + ans + " ");            return;        }         // First character of sub        char ch = sub.charAt(0);         // Sub-string starting from second        // character of sub        String ros = sub.substring(1);         // Excluding first character        printSubSeq(ros, ans);         // Including first character        printSubSeq(ros, ans + ch);    }     // Driver code    public static void main(String[] args)    {        String str = "abc";        printSubSeq(str, "");    }}

## Python3

 # Python3 implementation of the approach # Function to print all the sub-sequences# of a stringdef printSubSeq(sub, ans) :     if (len(sub) == 0) :        print(ans , end = " ")        return     # First character of sub    ch = sub[0]     # Sub-string starting from second    # character of sub    ros = sub[1 : ]     # Excluding first character    printSubSeq(ros, ans)     # Including first character    printSubSeq(ros, ans + ch) Str = "abc"printSubSeq(Str, "") # This code iscontributed by divyeshrabadiya07

## C#

 // C# implementation of the approachusing System; class GFG{ // Function to print all the // sub-sequences of a stringpublic static void printSubSeq(string sub,                               string ans){    if (sub.Length == 0)    {        Console.Write("" + ans + " ");        return;    }     // First character of sub    char ch = sub[0];     // Sub-string starting from second    // character of sub    string ros = sub.Substring(1);     // Excluding first character    printSubSeq(ros, ans);     // Including first character    printSubSeq(ros, ans + ch);} // Driver codepublic static void Main(){    string str = "abc";    printSubSeq(str, "") ;}} // This code is contributed by Ryuga

## Javascript


Output:
c b bc a ac ab abc

My Personal Notes arrow_drop_up