2016-03-27 19 views
0

Girdi: n kelimelerin listesi "kelime1 kelime2 word3 ... kelime-n"bir cümle JAVA kelime sunumunun bütün davaları bitiştirmek nasıl

Çıktı: Tüm vakaların birleştirme dizeleri listesi

public static List<String> PermuteWords(String s){ 
     String[] ss = s.split(" "); 
     boolean[] used = new boolean[ss.length]; 
     String res = ""; 
     List<String> list = new ArrayList<String>(); 
     permute(ss, used, res, 0, list); 
     return list; 
    } 

    private static void permute(String[] ss, boolean[] used, 
     String res, int level, List<String> list) { 

     if (level == ss.length && res != ""){ 
      list.add(res); 
      return; 
     } 

     for (int i = 0; i < ss.length; i++) { 
      if (used[i]) { 
       continue; 
      } 
      used[i] = true; 
      permute(ss, used, res + " " + ss[i], level + 1, list); 
      used[i] = false; 
     } 
    } 

    public static void main(String args[]){ 

     String inputString="word1 word2 word3"; 
     List<String> test=PermuteWords(inputString); 

     for (int i = 0; i < test.size(); i++) { 
      System.out.println(test.get(i)); 
     } 
    } 
: Bu kodu deneyin

s1: "word1 word2" 
s2: "word1 word3" 
s3: "word2 word1" 
s4: "word2 word3" 
s5: "word3 word1" 
s6: "word3 word1" 
s7: "word1 word2 word3" 
s8: "word1 word3 word2" 
s9: "word2 word1 word3" 
s10: "word2 word3 word1" 
s11: "word3 word1 word2" 
s12: "word3 word2 word1" 
... 
sm: "wordn...word3 word 2 word 1" 

: olarak sunumunu Permutasyon

Çıktı:

s1: "word1 word2" 
s2: "word1 word3" 
s3: "word2 word1" 
s4: "word2 word3" 
s5: "word3 word1" 
s6: "word3 word1" 

herkes bu sorunu çözebilir mi:

word1 word2 word3 
word1 word3 word2 
word2 word1 word3 
word2 word3 word1 
word3 word1 word2 
word3 word2 word1 

o gibi bazı durumlarda eksik Ancak?

+0

Olası çoğaltması [Bir sayı kümesinin tüm alt kümelerinin hesaplanması] (http://stackoverflow.com/questions/4640034/calculating-all-of-the-subsets-of-a-set-of-numbers) –

+0

@PM 77-1 farklıdır, çünkü bu problem kelimelerin tümünde “word1 <-> word2” ve “word2 <-> word1” gibi problemleri çözmemiştir. –

cevap

1

Böyle bir şeye ne dersin?

private static void permute(String[] ss, boolean[] used, 
          String res, int level, List<String> list) { 

    // End case 
    if (level == ss.length && res != ""){ 
     list.add(res); 
     return; 
    } 

    for (int i = 0; i < ss.length; i++) { 
     // Check if the string is currently used 
     if (used[i]) { 
      continue; 
     } 
     // Check if res is empty or a single word 
     if(level > 1) 
      list.add(res); 
     used[i] = true; 
     permute(ss, used, res + " " + ss[i], level + 1, list); 
     used[i] = false; 
    } 
} 

Çıktı:

word1 word2 
word1 word2 word3 
word1 word3 
word1 word3 word2 
word2 word1 
word2 word1 word3 
word2 word3 
word2 word3 word1 
word3 word1 
word3 word1 word2 
word3 word2 
word3 word2 word1 

Ben elemanları tekrarlama istediğin gibi alt öğeleri izin vermeyerek, sonuna ulaştı yalnızca listeye eklenen oluşuna bağlıyor koduyla sorun.

+0

Evet, teşekkürler. Bu iyi. Kodunu çalıştırdım ama hala çift çıktı var. ör. "word1 word2" 1 kereden fazla görünür. Ancak düzeltmek kolay olacaktır. –

İlgili konular