【发布时间】:2014-12-03 20:42:07
【问题描述】:
您好,我正在尝试找出一种有效的方法来获取字符串的所有排列,但也允许重复字符。 (例如对于字符串“ab”,输出将是“aa, bb, ba, ab”)
我的代码在没有重复的情况下正常工作,但我不确定如何修改它以允许重复字符,并且似乎只能找到在不重复字符的情况下执行此操作的方法。
这是我的代码:
public static ArrayList<String> permutationsUnique(String word) {
ArrayList<String> result = new ArrayList<String>();
if (word.length() == 0) {
result.add(word);
return result;
} else {
for (int i = 0; i < word.length(); i++) {
String shorter = word.substring(0, i) + word.substring(i + 1);
ArrayList<String> shorterPermutations = permutationsUnique(shorter);
for (String s : shorterPermutations) {
result.add(word.charAt(i) + s);
}
}
return result;
}
}
如果有人能指引我正确的方向,我将不胜感激。
谢谢
【问题讨论】:
-
你需要用递归来实现吗?每个排列的长度是否有限制?例如,
"bba"、"aba"和"abb"也是仅由字母'a'和'b'创建的排列。 -
in string "cat" output "tta" 将是一个有效的输出。
-
在这种情况下“ttat”是一个有效的输出吗?我的示例在原始案例中是有效的输出吗?
-
一个有效的输出不应超过原始字符串的 o 个字符,但它可以忽略某些字符。如果原始单词是“cats”,“ttat”将是一个好的输出
标签: java string recursion permutation