Open In App

Distinct permutations of a string containing duplicates using HashSet in Java

Last Updated : 19 Sep, 2019
Comments
Improve
Suggest changes
Like Article
Like
Report
Given a string str that may contain duplicate characters, the task is to print all the distinct permutations of the given string such that no permutation is repeated in the output. Examples:
Input: str = "ABA" Output: ABA AAB BAA Input: str = "ABC" Output: ABC ACB BAC BCA CBA CAB
Approach: An approach to generate all the permutations of a given string has been discussed in this article. All the permutations generated by this approach can be stored in a HashSet in order to avoid duplicates. Below is the implementation of the above approach: Java
// Java implementation of the approach
import java.util.HashSet;

public class GFG {

    // To store all the generated permutations
    public static HashSet<String> h = new HashSet<String>();

    public static void permute(char s[], int i, int n)
    {

        // If the permutation is complete
        if (i == n) {

            // If set doesn't contain
            // the permutation already
            if (!(h.contains(String.copyValueOf(s)))) {

                h.add(String.copyValueOf(s));

                // Print the generated permutation
                System.out.println(s);
            }
        }

        else {

            // One by one swap the jth
            // character with the ith
            for (int j = i; j <= n; j++) {

                // Swapping a[i] and a[j];
                char temp = s[i];
                s[i] = s[j];
                s[j] = temp;

                // Revert the swapping
                permute(s, i + 1, n);

                temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
        }
    }

    // Driver code
    public static void main(String args[])
    {
        char s[] = { 'A', 'B', 'A' };
        permute(s, 0, s.length - 1);
    }
}
Output:
ABA
AAB
BAA

Next Article
Article Tags :
Practice Tags :

Similar Reads