Java 菜鸟教程

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java 异常处理

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java 程序计算列出字符串的所有排列组合

Java 实例大全

在此示例中,我们将学习计算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 集合以避免重复排列
    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集合中。因此,不会有重复的排列组合。

Java 实例大全