跳到主要内容

Java 程序:计算字符串的所有排列

要理解这个示例,你需要了解以下 Java 编程 主题:

字符串的排列意味着可以通过交换字符串字符的位置形成的所有可能的新字符串。例如,字符串 ABC 的排列有 [ABC, ACB, BAC, BCA, CAB, CBA]

示例:Java 程序获取字符串的所有排列

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

class Main {
public static Set<String> getPermutation(String str) {

// 创建一个集合以避免重复的排列
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);

// 对 getPermutation() 进行递归调用
Set<String> words = getPermutation(sub);

// 访问 words 中的每个元素
for (String strNew : words) {
for (int i = 0; i <= strNew.length(); i++) {

// 将排列插入到集合中
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 中,我们使用了递归来计算字符串的所有排列。这里,我们在一个集合中存储排列,因此不会有重复的排列。