如果String是一个数组,则以两对的形式查找字符串组合的有效方法

时间:2011-09-30 23:17:44

标签: 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();
      }
    }

任何建议都将受到赞赏..

2 个答案:

答案 0 :(得分:1)

如果你想从给定的字母表中生成长度 k 所有可能的子串,那么你所做的就是非常优化。

如果要使用 n 元素(C(n, k))从给定的集合(或字母表)生成所有可能combinations长度 k ,那么经典的解决方案是使用 Rosen的算法

例如,给定一个5个字母的字母表,如果你想一次采用3个字母组合,那么它的要点就是这样计算:

012
013
014
023
024
034
123
.
.
.

这是我对RosenIterator in Java的实现。

答案 1 :(得分:1)

如果您只想要两个字符串的组合,那么您的代码基本上可以获得尽可能高效的代码,但需要注意以下几点:

  • 您需要确保输入数组不包含重复项。

  • 如果输入数组中的字符串长度不同,则可能需要检查输出数组中的重复项。