给定一个字符串str ,任务是打印str的所有排列。就排列的顺序而言,排列是一组对象的全部或一部分的排列。例如,单词“ bat”和“ tab”代表相似的三个字母单词的两个不同的排列(或排列)。
例子:
Input: str = “cd”
Output: cd dc
Input: str = “abb”
Output: abb abb bab bba bab bba
方法:编写一个递归函数,以打印给定字符串的每个排列。终止条件为传递的字符串为空时。
下面是上述方法的实现:
// Java program to print all the permutations
// of the given string
public class GFG {
// Function to print all the permutations of str
static void printPermutn(String str, String ans)
{
// If string is empty
if (str.length() == 0) {
System.out.print(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
printPermutn(ros, ans + ch);
}
}
// Driver code
public static void main(String[] args)
{
String s = "abb";
printPermutn(s, "");
}
}
输出:
abb abb bab bba bab bba
何时需要区分排列。
例子:
Input: str = “abb”
Output: abb bab bba
Input: str = “geek”
Output: geek geke gkee egek egke eegk eekg ekge ekeg kgee kege keeg
方法:编写一个可打印不同排列的递归函数。制作一个大小为’26’的布尔数组,该数组说明所使用的字符。如果尚未使用该字符,则将进行递归调用。否则,请勿拨打电话。终止条件为传递的字符串为空时。
下面是上述方法的实现:
// Java program to print all the permutations
// of the given string
public class GFG {
// Function to print all the distinct
// permutations of str
static void printDistinctPermutn(String str,
String ans)
{
// If string is empty
if (str.length() == 0) {
// print ans
System.out.print(ans + " ");
return;
}
// Make a boolean array of size '26' which
// stores false by default and make true
// at the position which alphabet is being
// used
boolean alpha[] = new boolean[26];
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);
// If the character has not been used
// then recursive call will take place.
// Otherwise, there will be no recursive
// call
if (alpha[ch - 'a'] == false)
printDistinctPermutn(ros, ans + ch);
alpha[ch - 'a'] = true;
}
}
// Driver code
public static void main(String[] args)
{
String s = "geek";
printDistinctPermutn(s, "");
}
}
输出:
geek geke gkee egek egke eegk eekg ekge ekeg kgee kege keeg