我有一本字典,里面有很多单词。我希望搜索最长的串联词(即,完全由
文件中较短的单词)。我给该方法一个从长度上降序的词。如何检查字典中是否已使用所有符号?

 public boolean tryMatch(String s, List dictionary) {
    String nextWord = new String();
    int contaned = 0;

    //Цикл перебирающий каждое слово словаря
        for(int i = 1; i < dictionary.size();i++) {

            nextWord = (String) dictionary.get(i);
            if (nextWord == s) {
                nextWord = (String) dictionary.get(i + 1);
            }

            if (s.contains(nextWord)) {

                contaned++;
            }

        }

    if(contaned >1) {
        return true;
    }
    return false;
}

最佳答案

如果您有排序的单词列表,则查找复合单词很容易,但是只有单词在Set中时,才能很好地执行。

让我们看一下复合词football,当然假定ballfoot都在工作列表中。

根据定义,任何使用foot作为第一个子词的复合词都必须以foot开头。

因此,在迭代列表时,请记住当前活动的“词干”字词,例如看到foot时,请记住它。

现在,当看到football时,您将检查单词是否以词干开头。如果不是,请清除词干,然后将新词设为词干。

如果是这样,则新单词(football)将成为复合单词的候选者。词干后的部分是ball,因此我们需要检查该词是否是单词,如果是,则找到一个复合单词。

对于简单情况,即wordSet.contains(remain),检查很容易。

但是,复合词可以由2个以上的词组成,例如whatsoever。因此,在从词干what中发现它是候选词之后,剩下的是soever

您可以简单地尝试所有长度的内容(soeversoevesoevsoesos),如果较短的单词之一是单词,则可以重复该过程。

09-26 13:57