2016-01-06 63 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等等。现在,逻辑需要验证您的数字组合是否是唯一的,因此您在构建单词时不会使用两次字母。

这是很多工作,但算法是正确的。好处是它适用于任何长度的字符串。

我知道我会被拒绝,但哦。