📜  在Java中使用 HashSet 对包含重复项的字符串进行不同排列

📅  最后修改于: 2022-05-13 01:57:06.498000             🧑  作者: Mango

在Java中使用 HashSet 对包含重复项的字符串进行不同排列

给定一个可能包含重复字符的字符串str ,任务是打印给定字符串的所有不同排列,以便在输出中不重复排列。

例子:

方法:本文讨论了一种生成给定字符串的所有排列的方法。这种方法生成的所有排列都可以存储在 HashSet 中,以避免重复。

下面是上述方法的实现:

// Java implementation of the approach
import java.util.HashSet;
  
public class GFG {
  
    // To store all the generated permutations
    public static HashSet h = new HashSet();
  
    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);
    }
}
输出:
ABA
AAB
BAA