在此示例中,我们将学习计算Java中字符串的所有排列组合。
要理解此示例,您应该了解以下Java编程主题:
字符串的排列是指可以通过互换字符串字符的位置来形成的所有可能的新字符串。例如,字符串 ABC 具有的排列组合 [ABC,ACB,BAC,BCA,CAB,CBA]。
import java.util.HashSet; import java.util.Scanner; import java.util.Set; class Main { public static Set<String> getPermutation(String str) { //创建 set 集合以避免重复排列 Set<String> permutations = new HashSet<String>(); //检查字符串是否为空 if (str == null) { return null; } else if (str.length() == 0) { //递归的终止条件 permutations.add(""); return permutations; } //得到第一个字符 char first = str.charAt(0); //获取剩余的子字符串 String sub = str.substring(1); //递归调用getPersertion() Set<String> words = getPermutation(sub); //遍历 words for (String strNew : words) { for (int i = 0;i<=strNew.length();i++){ //将排列插入到set集合中 permutations.add(strNew.substring(0, i) + first + strNew.substring(i)); } } return permutations; } public static void main(String[] args) { //创建scanner类的对象 Scanner input = new Scanner(System.in); // 接受用户的输入 System.out.print("输入字符串: "); String data = input.nextLine(); System.out.println(data + " 的排列组合有: \n" + getPermutation(data)); } }
输出结果
输入字符串: ABC ABC 的排列组合有: [ACB, BCA, ABC, CBA, BAC, CAB]
在Java中,我们使用了递归来计算字符串的所有排列组合。在这里,我们将排列存储在set集合中。因此,不会有重复的排列组合。