有很多关于为字符串查找Permutation的指南,但是我如何为ArrayList中的每个元素执行此操作?鉴于:
ArrayList<String> list = [bob, cat, dog]
输出:
[bob, cat, dog]
[bob, dog, cat]
[dog, bob, cat]
[dog, cab, bob]
....
这是我的代码,它将置换单个字:
public class permutations {
public ArrayList<String> performPermutations(String s){
ArrayList<String> arrayList = new ArrayList<String>();
if (s == null) {
return null;
}
else if (s.length() == 0) {
arrayList.add("");
return arrayList;
}
else {
for (int i = 0; i < s.length(); i++) {
ArrayList<String> remaining = performPermutations(s.substring(0, i) + s.substring(i + 1));
for (int j = 0; j < remaining.size(); j++) {
arrayList.add(s.charAt(i) + remaining.get(j));
}
}
return arrayList;
}
}
public static void main(String[] args) {
permutations p = new permutations();
ArrayList<String> arr = p.performPermutations("abc");
for(int i = 0; i<arr.size();i++) {
System.out.println(arr.get(i));
}
}
答案 0 :(得分:0)
请参阅此处的代码以了解数字的排列:
Java code for permutation of a list of numbers
现在在你的情况下,数字列表将只是字符串ArrayList的索引列表。所以基本上索引的排列将导致字符串的排列。
答案 1 :(得分:0)
反转任何内容的简单解决方案(句子中的单词,列表中的项目等)是使用堆栈:
虽然在性能方面可能不是最好的,但只要你可以把它放在一个堆栈中,它就适用于所有东西。并且这两个循环不彼此嵌入,所以它比你的例子更好。