有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
示例1:
输入:S = "qqe" 输出:["eqq","qeq","qqe"]
示例2:
输入:S = "ab" 输出:["ab", "ba"]
提示:
- 字符都是英文字母。
- 字符串长度在[1, 9]之间。
package Solutionmst0808;
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public String[] permutation(String S) {
ArrayList<String> answer = distinct_pattern(S);
String[] out = new String[answer.size()];
for (int i = 0; i < answer.size(); i++) {
out[i] = answer.get(i);
}
return out;
}
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;
}
static boolean is_present(String my_str, ArrayList<String> rem) {
for (String str : rem) {
if (str.equals(my_str))
return true;
}
return false;
}
public static void main(String[] args) {
Solution sol = new Solution();
// String S = "qDHKARXp";
String S = "mqam";
System.out.println(Arrays.toString(sol.permutation(S)));
}
}