📜  使用Java的Collections打印字符串的所有排列而无需重复

📅  最后修改于: 2021-05-24 20:18:31             🧑  作者: Mango

给定一个字符串str ,任务是打印str的所有排列。就排列的顺序而言,排列是一组对象的全部或一部分的排列。排列在输出中不应包含重复的字符串。

例子:

方法:编写一个递归函数,该函数从原始字符串中一个一个地删除一个字符,并通过附加这些被删除的字符生成一个新的字符串。基本条件是所有字符均已使用。在这种情况下,请将生成的字符串(原始字符串的置换)插入集合中,以避免重复。

下面是上述方法的实现:

// 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