给定一个字符串str ,任务是打印str的所有排列。就排列的顺序而言,排列是一组对象的全部或一部分的排列。排列在输出中不应包含重复的字符串。
例子:
Input: str = “aa”
Output:
aa
Note that “aa” will be printed only once
as duplicates are not allowed.
Input: str = “ab”
Output:
ab
ba
方法:编写一个递归函数,该函数从原始字符串中一个一个地删除一个字符,并通过附加这些被删除的字符生成一个新的字符串。基本条件是所有字符均已使用。在这种情况下,请将生成的字符串(原始字符串的排列)插入到集合中,以避免重复。
下面是上述方法的实现:
// Java implementation of the approach
import java.util.*;
public class GFG {
static Set hash_Set = new HashSet<>();
// Recursive function to generate
// permutations of the string
static void Permutation(String str, String ans)
{
// If string is empty
if (str.length() == 0) {
// Add the generated permutation to the
// set in order to avoid duplicates
hash_Set.add(ans);
return;
}
for (int i = 0; i < str.length(); i++) {
// ith character of str
char ch = str.charAt(i);
// Rest of the string after excluding
// the ith character
String ros = str.substring(0, i)
+ str.substring(i + 1);
// Recurvise call
Permutation(ros, ans + ch);
}
}
// Driver code
public static void main(String[] args)
{
String s = "ab";
// Generate permutations
Permutation(s, "");
// Print the generated permutations
hash_Set.forEach((n) -> System.out.println(n));
}
}
输出:
ab
ba