我有一本字典,里面有很多单词。我希望搜索最长的串联词(即,完全由
文件中较短的单词)。我给该方法一个从长度上降序的词。如何检查字典中是否已使用所有符号?
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
,当然假定ball
和foot
都在工作列表中。
根据定义,任何使用foot
作为第一个子词的复合词都必须以foot开头。
因此,在迭代列表时,请记住当前活动的“词干”字词,例如看到foot
时,请记住它。
现在,当看到football
时,您将检查单词是否以词干开头。如果不是,请清除词干,然后将新词设为词干。
如果是这样,则新单词(football
)将成为复合单词的候选者。词干后的部分是ball
,因此我们需要检查该词是否是单词,如果是,则找到一个复合单词。
对于简单情况,即wordSet.contains(remain)
,检查很容易。
但是,复合词可以由2个以上的词组成,例如whatsoever
。因此,在从词干what
中发现它是候选词之后,剩下的是soever
。
您可以简单地尝试所有长度的内容(soever
,soeve
,soev
,soe
,so
,s
),如果较短的单词之一是单词,则可以重复该过程。