在Java中使用 HashSet 对包含重复项的字符串进行不同排列
给定一个可能包含重复字符的字符串str ,任务是打印给定字符串的所有不同排列,以便在输出中不重复排列。
例子:
Input: str = “ABA”
Output:
ABA
AAB
BAA
Input: str = “ABC”
Output:
ABC
ACB
BAC
BCA
CBA
CAB
方法:本文讨论了一种生成给定字符串的所有排列的方法。这种方法生成的所有排列都可以存储在 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