我有一个包含很多单词的字典。我希望搜索最长的连接词(也就是说,最长的单词,完全由...组成) 文件中较短的单词)。我从它们的长度给出了一个降序的方法。如何检查字典中是否已使用所有符号?
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;
}
答案 0 :(得分:1)
如果你有一个排序的单词列表,找到复合单词很容易,但只有当单词在Set
时才会有效。
让我们看看复合词football
,当然假设ball
和foot
都在工作列表中。
根据定义,使用foot
作为第一个子词的任何复合词必须以foot开头。
因此,在迭代列表时,请记住当前活动的“词干”词,例如看到foot
时,请记住它。
现在,当看到football
时,您会检查单词是否以词干开头。如果没有,请清除干词,并将新词改为词干。
如果是,则新词(football
)是复合词的候选词。词干之后的部分是ball
,所以我们需要检查这是否是一个单词,如果是,我们找到了一个复合词。
对于简单的案例,检查很容易,即wordSet.contains(remain)
。
然而,复合词可以由超过2个单词组成,例如whatsoever
。因此,在发现它是词干what
中的候选词后,剩余部分为soever
。
您可以尝试所有长度(soever
,soeve
,soev
,soe
,so
,s
),以及如果其中一个较短的是单词,则重复此过程。