Skip to content
Related Articles
Open in App
Not now

Related Articles

All possible strings of any length that can be formed from a given string

Improve Article
Save Article
Like Article
  • Difficulty Level : Medium
  • Last Updated : 24 Mar, 2023
Improve Article
Save Article
Like Article

Given a string of distinct characters, print all possible strings of any length that can be formed from given string characters. Examples:

Input: abc
Output: a b c abc ab ac bc bac bca 
         cb ca ba cab cba acb

Input: abcd
Output: a b ab ba c ac ca bc cb abc acb bac
         bca cab cba d ad da bd db abd adb bad 
         bda dab dba cd dc acd adc cad cda dac 
         dca bcd bdc cbd cdb dbc dcb abcd abdc 
         acbd acdb adbc adcb bacd badc bcad bcda 
         bdac bdca cabd cadb cbad cbda cdab cdba 
         dabc dacb dbac dbca dcab dcba 

The generation of all strings include the following steps. 1) Generate all subsequences of given string. 2) For every subsequence ‘subs’, print all permutations of ‘subs’ 
Below is C++ implementation. It uses next_permutation function in C++

C++




/*  C++ code to generate all possible strings
    that can be formed from given string */
#include<bits/stdc++.h>
using namespace std;
 
void printAll(string str)
{
    /* Number of subsequences is (2**n -1)*/
    int n = str.length();
    unsigned int opsize = pow(2, n);
 
    /* Generate all subsequences of a given string.
       using counter 000..1 to 111..1*/
    for (int counter = 1; counter < opsize; counter++)
    {
        string subs = "";
        for (int j = 0; j < n; j++)
        {
            /* Check if jth bit in the counter is set
                If set then print jth element from arr[] */
            if (counter & (1<<j))
                subs.push_back(str[j]);
        }
 
        /* Print all permutations of current subsequence */
        do
        {
            cout << subs << " ";
        }
        while (next_permutation(subs.begin(), subs.end()));
    }
}
 
// Driver program
int main()
{
    string str = "abc";
    printAll(str);
    return 0;
}

Java




import java.util.*;
 
class Main {
    static void printAll(String str) {
        /* Number of subsequences is (2**n -1)*/
        int n = str.length();
        int opsize = (int)Math.pow(2, n);
 
        /* Generate all subsequences of a given string.
           using counter 000..1 to 111..1*/
        for (int counter = 1; counter < opsize; counter++) {
            StringBuilder subs = new StringBuilder();
            for (int j = 0; j < n; j++) {
                /* Check if jth bit in the counter is set
                    If set then print jth element from arr[] */
                if ((counter & (1 << j)) != 0)
                    subs.append(str.charAt(j));
            }
 
            /* Print all permutations of current subsequence */
            char[] chars = subs.toString().toCharArray();
            Arrays.sort(chars);
            do {
                System.out.print(String.valueOf(chars) + " ");
            } while (nextPermutation(chars));
        }
    }
   // next permutation function
    static boolean nextPermutation(char[] arr) {
        int i = arr.length - 2;
        while (i >= 0 && arr[i] >= arr[i + 1])
            i--;
        if (i < 0)
            return false;
        int j = arr.length - 1;
        while (arr[j] <= arr[i])
            j--;
      // Swap function
        swap(arr, i, j);
      // Reversing
        reverse(arr, i + 1, arr.length - 1);
        return true;
    }
   // Swap function
    static void swap(char[] arr, int i, int j) {
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
 // Reverse function
    static void reverse(char[] arr, int i, int j) {
        while (i < j)
            swap(arr, i++, j--);
    }
 
    // Driver program
    public static void main(String[] args) {
        String str = "abc";
        printAll(str);
    }
}

Python3




# Python3 code to generate all possible strings
# that can be formed from given string
from itertools import permutations
   
def printAll( st):
     
    # Number of subsequences is (2**n -1)
    n = len(st)
    opsize = pow(2, n)
  
    # Generate all subsequences of a given string.
    #  using counter 000..1 to 111..1
    for counter in range(1, opsize):
     
        subs = ""
        for j in range(n):
         
            # Check if jth bit in the counter is set
            #   If set then print jth element from arr[]
            if (counter & (1<<j)):
                subs += (st[j])
  
        # Print all permutations of current subsequence
        perm = permutations(subs)
         
        for i in perm:
            print(''.join(i),end=" ")
             
# Driver program
if __name__ == "__main__":
     
    st = "abc"
    printAll((st))
     
# This code is contributed by chitranayal

Output

a b ab ba c ac ca bc cb abc acb bac bca cab cba 

Time complexity: O(n * 2^n * n!)
Auxiliary Space : O(2^n * n)

This article is contributed by Hardik Gaur. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.


My Personal Notes arrow_drop_up
Like Article
Save Article
Related Articles

Start Your Coding Journey Now!