原文:

给定一个字符串 str ,任务是打印 str 的所有排列。排列是一组对象的全部或部分的排列,与排列的顺序有关。一个置换不应该在输出中有重复的字符串。

示例:

输入: str = "aa" 输出: aa 注意“aa”只打印一次 不允许重复。

输入:str = " ab " t3】输出:t5】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));
    }
}

output:

ab
ba