找到最长的连接词

时间:2018-01-12 22:17:59

标签: java string

我有一个包含很多单词的字典。我希望搜索最长的连接词(也就是说,最长的单词,完全由...组成) 文件中较短的单词)。我从它们的长度给出了一个降序的方法。如何检查字典中是否已使用所有符号?

 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;
}

1 个答案:

答案 0 :(得分:1)

如果你有一个排序的单词列表,找到复合单词很容易,但只有当单词在Set时才会有效。

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

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

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

现在,当看到football时,您会检查单词是否以词干开头。如果没有,请清除干词,并将新词改为词干。

如果是,则新词(football)是复合词的候选词。词干之后的部分是ball,所以我们需要检查这是否是一个单词,如果是,我们找到了一个复合词。

对于简单的案例,检查很容易,即wordSet.contains(remain)

然而,复合词可以由超过2个单词组成,例如whatsoever。因此,在发现它是词干what中的候选词后,剩余部分为soever

您可以尝试所有长度(soeversoevesoevsoesos),以及如果其中一个较短的是单词,则重复此过程。