2016-01-06 69 views
0

我想製作一個程序,可以使某些單詞不混雜。
我需要嘗試所有可能組合的單詞,然後檢查它是否包含在名爲dict的String變量中。爪哇:'for'循環的未知數

我的代碼是:

public class UnJumble 
{ 
    public static void main(String args[]) 
    { 
     String dict = "cat, rat, mat dog, let, den, pen, tag, art,"; 

     String t = "tra"; 
     int l = t.length(); 
     for(int i=0; i<l; i++) 
     { 
       char a=t.charAt(i); 
       t = t.replaceFirst(a+"",""); 
       l--; 
       for(int j=0; j<l; j++) 
       { 
        char b = t.charAt(j); 
        t = t.replaceFirst(b+"",""); 
        l--; 
        for(int k=0; k<l; k++) 
        { 
          char c = t.charAt(k); 
          if(dict.contains(""+a+b+c+",")) 
          { 
           System.out.println("\'"+a+b+c+"\' found."); 
           break; 
          } 
        } 
        l++; 
        t = new StringBuilder(t).insert(j,b+"").toString(); 
       } 
       t = new StringBuilder(t).insert(i,a+"").toString(); 
       l++; 
     } 
    } 
} 

變量t包含單詞是未混亂。

有了這個代碼,輸出爲:
'rat' found.
'art' found.

我想,我需要儘可能多的for循環,因爲作爲字符字符串t

但我想使它能夠解開未知長度的混亂單詞。那麼我怎麼能做到這一點?

我試過在互聯網上搜索,所以在SO上。我發現了一些用其他編程語言編寫的答案,我不明白。

+3

查找遞歸方法;) –

+0

第一個循環,其中包含最多的兩個詞:可以製作的最大詞的組合,即n個字母可以產生一定數量的組合(用於計算的搜索組合),或者總字典字數(以較低者爲準)。 –

+2

你只是想排列't'。見例如http://stackoverflow.com/questions/4240080/generating-all-permutations-of-a-given-string – dejvuth

回答

0

你應該尋找遞歸方法。

例如,給定一個字符串nstr字符,你可以寫一個函數,basicaly做到這一點:

List<String> compute(String str) 
    // TODO : Handle case where str has only 1 character 
    List<String> list = compute(str.substring(0,n-2)) 
    // TODO : Compute all combinations of str[n-1] with list 
    return list; 

我想這可以在某些情況下提高了很多。

+0

我搜索了互聯網遞歸方法,但不能考慮如何在這裏實現它。 – Hackerdarshi

0

對變量t中的每個字母沒有for循環,有一個棘手的方法,但這是代碼密集型的。 您可以設置一個以n爲基數的循環,其中n是t的長度。假設我是你的計數器:每次通過這個循環,你使用i中的個別數字作爲t的索引,然後建立一個'單詞'並對照你的字典測試這個單詞。你正在使用我兩種不同的方式:作爲一個計數器和一組代表你的t指數的數字。

例如,如果你的t有三個字母,那麼你想在基數3中計數,就像這樣:012,020,021,022,100,101,110,111等等。現在,邏輯需要驗證您的數字組合是否是唯一的,因此您在構建單詞時不會使用兩次字母。

這是很多工作,但算法是正確的。好處是它適用於任何長度的字符串。

我知道我會被拒絕,但哦。