我想制作一个不会混淆某些词语的程序
我需要尝试可以形成的单词的所有可能组合,然后检查它是否包含在名为dict
的String变量中。
我的代码是:
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上搜索。我在SO上找到了一些用其他编程语言编写的答案,我不明白。
答案 0 :(得分:0)
你应该寻找递归方法。
例如,给定str
个n
个字符的字符串,您可以编写一个基本执行此操作的函数:
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;
我想在某些情况下可以改进很多。
答案 1 :(得分:0)
对于变量t中的每个字母没有for循环,有一种棘手的方法,但它是代码密集型的。 您可以设置一个以n为基数的循环,其中n是t的长度。假设我是你的计数器:每次通过该循环,你使用i中的各个数字作为t的索引,然后建立一个&#39;字&#39;并根据你的字典测试这个词。您正在使用两种不同的方式:作为计数器和一组数字,表示您的t的索引。
例如,如果你的t有三个字母,那么你想要像这样计算基数3:012,020,021,022,100,101,110,111等等。现在,逻辑需要验证您的数字组合是否唯一,这样您在构建单词时就不会使用两次字母。
这项工作很多,但算法是正确的。好处是它适用于任何长度的字符串。
我知道我会被投票,但是哦。