Permutations of given String (original) (raw)

Last Updated : 10 Apr, 2025

Try it on GfG Practice redirect icon

Given a **string s, the task is to **return all permutations of a given string in lexicographically sorted order.

**Note: A permutation is the rearrangement of all the elements of a string. Duplicate arrangement can exist.

**Examples:

**Input: s = “ABC”
**Output: “ABC”, “ACB”, “BAC”, “BCA”, “CAB”, “CBA”

**Input: s = “XY”
**Output: “XY”, “YX”

**Input: s = “AAA”
**Output: “AAA”, “AAA”, “AAA”, “AAA”, “AAA”, “AAA”

The idea is to use backtracking to generate all possible permutations of given **string s. To do so, first **initialize an array of string **ans[] to *store all the permutations. Start from the 0 th index and for each index i*, **swap the value s[i] with all the elements in its right i.e. from i+1 to n-1, and recur to the index i + 1. If the index i is equal to **n, store the resultant **string in **ans[], else keep operating similarly for all other indices. Thereafter, **swap back the values to original values to initiate **backtracking. At last **sort the array ans[].

**illustration:

4

Below is the implementation of the above approach:

C++ `

// C++ Program to generate all unique // permutations of a string #include <bits/stdc++.h> using namespace std;

// Recursive function to generate // all permutations of string s void recurPermute(int index, string &s, vector &ans) {

// Base Case
if (index == s.size()) {
    ans.push_back(s);
    return;
}

// Swap the current index with all
// possible indices and recur
for (int i = index; i < s.size(); i++) {
    swap(s[index], s[i]);
    recurPermute(index + 1, s, ans);
    swap(s[index], s[i]);
}

}

// Function to find all unique permutations vector findPermutation(string &s) {

// Stores the final answer
vector<string> ans;

recurPermute(0, s, ans);

// sort the resultant vector
sort(ans.begin(), ans.end());

return ans;

}

int main() { string s = "ABC"; vector res = findPermutation(s); for(auto x: res) { cout << x << " "; } return 0; }

Java

// Java Program to generate all unique // permutations of a string import java.util.*;

class GfG {

// Recursive function to generate 
// all permutations of string s
static void recurPermute(int index, StringBuilder s, 
                        List<String> ans) {

    // Base Case
    if (index == s.length()) {
        ans.add(s.toString());
        return;
    }

    // Swap the current index with all
    // possible indices and recur
    for (int i = index; i < s.length(); i++) {
        swap(s, index, i);
        recurPermute(index + 1, s, ans);
        swap(s, index, i);
    }
}

// Swap characters at positions i and j
static void swap(StringBuilder s, int i, int j) {
    char temp = s.charAt(i);
    s.setCharAt(i, s.charAt(j));
    s.setCharAt(j, temp);
}

// Function to find all unique permutations
static List<String> findPermutation(String s) {

    // Stores the final answer
    List<String> ans = new ArrayList<>();
    StringBuilder str = new StringBuilder(s);

    recurPermute(0, str, ans);

    // sort the resultant list
    Collections.sort(ans);

    return ans;
}

public static void main(String[] args) {
    String s = "ABC";
    List<String> res = findPermutation(s);
    for (String x : res) {
        System.out.print(x + " ");
    }
}

}

Python

Python Program to generate all unique

permutations of a string

Recursive function to generate

all permutations of string s

def recurPermute(index, s, ans):

# Base Case
if index == len(s):
    ans.append("".join(s))
    return

# Swap the current index with all
# possible indices and recur
for i in range(index, len(s)):
    s[index], s[i] = s[i], s[index]
    recurPermute(index + 1, s, ans)
    s[index], s[i] = s[i], s[index]

Function to find all unique permutations

def findPermutation(s):

# Stores the final answer
ans = []

recurPermute(0, list(s), ans)

# sort the resultant list
ans.sort()

return ans

if name == "main": s = "ABC" res = findPermutation(s) for x in res: print(x, end=" ")

C#

// C# Program to generate all unique // permutations of a string using System; using System.Collections.Generic;

class GfG {

// Recursive function to generate 
// all permutations of string s
static void recurPermute(int index, char[] s, 
                        List<string> ans) {

    // Base Case
    if (index == s.Length) {
        ans.Add(new string(s));
        return;
    }

    // Swap the current index with all
    // possible indices and recur
    for (int i = index; i < s.Length; i++) {
        Swap(s, index, i);
        recurPermute(index + 1, s, ans);
        Swap(s, index, i);
    }
}

// Swap characters at positions i and j
static void Swap(char[] s, int i, int j) {
    char temp = s[i];
    s[i] = s[j];
    s[j] = temp;
}

// Function to find all unique permutations
static List<string> findPermutation(string s) {

    // Stores the final answer
    List<string> ans = new List<string>();

    recurPermute(0, s.ToCharArray(), ans);

    // sort the resultant list
    ans.Sort();

    return ans;
}

static void Main(string[] args) {
    string s = "ABC";
    List<string> res = findPermutation(s);
    foreach (string x in res) {
        Console.Write(x + " ");
    }
}

}

JavaScript

// JavaScript Program to generate all unique // permutations of a string

// Recursive function to generate // all permutations of string s function recurPermute(index, s, ans) {

// Base Case
if (index === s.length) {
    ans.add(s.join(""));
    return;
}

// Swap the current index with all
// possible indices and recur
for (let i = index; i < s.length; i++) {
    [s[index], s[i]] = [s[i], s[index]];
    recurPermute(index + 1, s, ans);
    [s[index], s[i]] = [s[i], s[index]];
}

}

// Function to find all unique permutations function findPermutation(s) {

// sort input string
s = s.split("").sort();

// Stores all unique permutations
let res = new Set();
recurPermute(0, s, res);

// Convert Set to Array for the final answer
return Array.from(res).sort();

}

const s = "ABC"; const res = findPermutation(s); console.log(res.join(" "));

`

Output

ABC ACB BAC BCA CAB CBA

**Time Complexity: O(n * n!)
**Auxiliary Space: O(n!)

**Related articles:

Similar Reads

Standard problems on backtracking












Easy Problems on Backtracking








Medium prblems on Backtracking









Hard problems on Backtracking