Java程序打印字符串的不同排列


在这篇文章中,我们将学习如何使用Java生成并打印给定字符串的所有不同排列。排列是字符串中字符的重新排列,此程序将确保不打印重复的排列。该方法通过检查每个重新排列并避免任何重复来工作。

问题陈述

编写一个Java程序来打印给定字符串的不同排列:

输入

my_str = "mnqm"

输出

The distinct permutations of the string are
[mnqm, nmqm, nqmm, mqnm, qmnm, qnmm, mqmn, qmmn, mnmq, nmmq, mmnq, mmqn]

打印字符串的不同排列的步骤

以下是打印字符串的不同排列的步骤:

  • 首先,我们从java.util包导入ArrayList类来存储和操作排列。
  • 我们定义一个名为is_present的函数来检查特定排列是否已添加到不同排列列表中。
  • 然后,使用递归函数distinct_pattern通过迭代字符串的字符并将每个字符放在由剩余子字符串形成的排列的不同位置来生成排列。
  • 在排列生成过程中,我们使用is_present函数来避免将重复排列添加到列表中。
  • main()方法定义要排列的字符串,并调用distinct_pattern函数来生成不同的排列。
  • 最后,打印不同的排列列表。

Java程序打印字符串的不同排列

要打印字符串的不同排列,Java程序如下所示:

import java.util.ArrayList;
public class Demo {
    static boolean is_present(String my_str, ArrayList<String> rem) {
        for (String str : rem) {
            if (str.equals(my_str))
                return true;
        }
        return false;
    }
    static ArrayList<String> distinct_pattern(String str) {
        if (str.length() == 0) {
            ArrayList<String> base_Val = new ArrayList<>();
            base_Val.add("");
            return base_Val;
        }
        char ch = str.charAt(0);
        String rem_str = str.substring(1);
        ArrayList<String> prev_str = distinct_pattern(rem_str);
        ArrayList<String> rem = new ArrayList<>();
        for (String my_str : prev_str) {
            for (int i = 0; i <= my_str.length(); i++) {
                String f = my_str.substring(0, i) + ch + my_str.substring(i);
                if (!is_present(f, rem))
                    rem.add(f);
            }
        }
        return rem;
    }
    public static void main(String[] args) {
        String my_str = "mnqm";
        System.out.println("The distinct permutations of the string are ");
        System.out.println(distinct_pattern(my_str));
    }
}

输出

The distinct permutations of the string are
[mnqm, nmqm, nqmm, mqnm, qmnm, qnmm, mqmn, qmmn, mnmq, nmmq, mmnq, mmqn]

代码解释

名为Demo的类包含一个名为is_present的布尔函数,该函数检查字符串是否实际存在。它根据字符串是否包含某些字符返回true或false。另一个名为distinct_pattern的函数创建一个ArrayList。

定义另一个名为rem_str的字符串,它存储字符串的子字符串。通过传递rem_str来调用此distinct_function。通过这种方式,字符串被迭代,并且在生成另一个不同的排列之前,会检查每个字符的位置。这样,所有重复项都被避免了。最后,所有唯一的排列都显示在控制台上。主函数定义字符串,并在此字符串上调用distinct_pattern函数。相关的输出显示在控制台上。

更新于:2024年9月19日

680 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告