2012-04-12 2 views
1
public class StringPermutation {  
    public static List<String> getPermutation(String input) { 
     List<String> collection = null; 
     if (input.length() == 1) { 
      collection = new ArrayList<String>(); 
      collection.add(input); 
      return collection; 
     } else { 
      collection = getPermutation(input.substring(1)); 
      Character first = input.charAt(0); 
      List<String> result = new ArrayList<String>(); 
      for (String str : collection) { 
       for (int i = 0; i < str.length(); i++) { 
        String item = str.substring(0, i) + first 
          + str.substring(i); 
        result.add(item); 
       } 
       String item = str.concat(first.toString()); 
       result.add(item); 
      } 
      return result; 
     } 
    } 

    public static void main(String[] args) { 
     List<String> test = StringPermutation.getPermutation ("CAT"); 
     System.out.println (test); 
    } 
} 

上記のコードは、指定された文字列を置換します。たとえば、catと指定すると、[cat, act, atc, cta, tca, tac]が返ってきますが、これは優れていますが、私のコードを編集して文字の部分集合も表示できるようになります。つまり、[cat, act, atc, cta, tca, tac] and [at, ta, tc, ca, ac, ct, c, a, t]?すべての組み合わせを文字に置換する

私は何を求めているのか理解していただければ幸いです。あなたが理解できない場合、私はさらに説明します。ありがとう、私は感謝します。

+0

宿題? 。それをタグ付けしてください。ちなみに、私はこの質問がここで何度も答えられていると信じていますが、私はあなた自身(これはhwの背後にあるポイントです)でも働こうとすることをお勧めします – Pepe

+0

lolこれは宿題ではありません。 program.iのちょうどのセクションは、それをテストするためにAPKを送ることができますが、まだ完成していません。その答えが出たら、リンクを貼ってください。 – ImGeorge

答えて

1

私はあなたの最初の文字のすべてのサブセットを生成し、特定のサブセットのためのすべての順列を生成することができると思います。

Set<String> subsets; 

public void generateSubsets(String current, String left) { 
    if (left.length() == 0) { 
     subsets.add(current); 
    } else { 
     generateSubsets(current, left.substring(1)); 
     generateSubsets(current + left.charAt(0), left.substring(1)); 
    } 
} 

List<String> allPermutations(String word) { 
    subsets = new HashSet<String>(); 
    generateSubsets("", word); 
    List<String> result = new ArrayList<String>(); 
    for (String subset : subsets) { 
     result.addAll(StringPermutation.getPermutation(subset)); 
    } 
    return result; 
} 

あなたは「猫」を持っているのであれば サブセットは次のようになります「」、「C」、 " a "、" t "、" ca "、" ct "、" tc "、" cat " そして、すべてのサブセットに対して順列を取得します。
効率に関しては、最適な解決策ではありませんが、改善することは可能です。

+0

あなたが正しくないのは、Javaがヒープ・スペース・エラーを起こしていることです。それをテキストファイルに送ることを考えています。あなたが効率的で信頼性の高いアンドロイドアプリを構築する上での提案があれば、 – ImGeorge

+0

ありがとう – ImGeorge

関連する問題