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函式。相關的輸出顯示在控制檯上。
廣告