#java
#java
Вопрос:
Это то, что у меня есть до сих пор.
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();
}
}
Любые предложения будут оценены..
Комментарии:
1. для строки «ABCD» вы хотите разрешить «AAA» в качестве трехсимвольной подстроки? вы хотите разрешить «CBA» в качестве трехсимвольной подстроки?
2. Я хочу пару из двух, а не три… И никаких повторяющихся строк ..!!
3. @Raihan Jamal: Можете ли вы привести пример правильного вывода? Правильно ли работает ваш текущий код?
4. @RaihanJamal Это странно. Из вашего кода может показаться, что вам нужна длина 3.
5. Вывод, такой как ab, bc, ca и т. Д. И т. Д. Я тестировал с тремя, но мне не нужны три.
Ответ №1:
Если вам просто нужны комбинации из двух строк, то ваш код в основном настолько эффективен, насколько вы можете получить, со следующими оговорками:
-
Вы должны быть уверены, что входной массив не содержит дубликатов.
-
Если строки во входном массиве не все имеют одинаковую длину, вам может потребоваться проверить наличие дубликатов в выходном массиве.
Ответ №2:
Если вы хотите сгенерировать все возможные подстроки длины k из заданного алфавита, то то, что вы делаете, в значительной степени оптимально.
Если вы хотите сгенерировать все возможные комбинации длины k из заданного набора (или алфавита) с n элементами ( C(n, k)
) , то классическим решением является использование алгоритма Розена.
Например, учитывая 5-буквенный алфавит, если вы хотите одновременно использовать 3 комбинации, суть этого в том, чтобы считать так:
012
013
014
023
024
034
123
.
.
.
Вот моя реализация a RosenIterator
в Java.