这是我到目前为止所做的。
package testproject;
public class Combinations{
public Combinations(){
String str_arr[]={"a","b","c"};
GenCombinations(str_arr);
}
public void GenCombinations(String[] str_arr){
System.out.println("Generating All possible Combinations for the following "+str_arr.length+" strings.");
for(int i=0;i<str_arr.length;i++)
{
System.out.print(str_arr[i]+" ");
}
System.out.println("\n------------------------------------------");
/*COMBINATIONS OF LENGTH ONE*/
for(int i=0;i<str_arr.length;i++)
System.out.println(str_arr[i]);
/*COMBINATIONS OF LENGTH TWO*/
for(int i=0;i<str_arr.length;i++)
{
for(int j=0;j<str_arr.length;j++)
{
System.out.println(str_arr[i]+""+str_arr[j]);
}
}
/*COMBINATIONS OF LENGTH THREE*/
for(int i=0;i<str_arr.length;i++)
{
for(int j=0;j<str_arr.length;j++)
{
for(int k=0;k<str_arr.length;k++)
{
System.out.println(str_arr[i]+""+str_arr[j]+""+str_arr[k]);
}
}
}
}
public static void main(String[] args){
new Combinations();
}
}
任何建议都将受到赞赏..
答案 0 :(得分:1)
如果你想从给定的字母表中生成长度 k 的所有可能的子串,那么你所做的就是非常优化。
如果要使用 n 元素(C(n, k)
)从给定的集合(或字母表)生成所有可能combinations长度 k ,那么经典的解决方案是使用 Rosen的算法。
例如,给定一个5个字母的字母表,如果你想一次采用3个字母组合,那么它的要点就是这样计算:
012
013
014
023
024
034
123
.
.
.
这是我对RosenIterator
in Java的实现。
答案 1 :(得分:1)
如果您只想要两个字符串的组合,那么您的代码基本上可以获得尽可能高效的代码,但需要注意以下几点:
您需要确保输入数组不包含重复项。
如果输入数组中的字符串长度不同,则可能需要检查输出数组中的重复项。