【发布时间】:2016-11-12 00:00:27
【问题描述】:
我有一个单词列表,其中包含“简单”和“复合”单词,并且想要实现一个算法,该算法可以打印出一个单词列表,其中不包含由简单单词组成的复合词。
样本输入:
chat, ever, snapchat, snap, salesperson, per, person, sales, son, whatsoever, what, so
期望的输出:
chat, ever, snap, per, sales, son, what, so
我已经写了以下内容,但我不知道如何从这里开始:
private static String[] find(String[] words) {
ArrayList<String> alist = new ArrayList<String>();
Set<String> r1 = new HashSet<String>();
for(String s: words){
alist.add(s);
}
Collections.sort(alist,new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});
int count= 0;
for(int i=0;i<alist.size();i++){
String check = alist.get(i);
r1.add(check);
for(int j=i+1;j<alist.size();j++){
String temp = alist.get(j);
//System.out.println(check+" "+temp);
if(temp.contains(check) ){
alist.remove(temp);
}
}
}
System.out.println(r1.toString());
String res[] = new String[r1.size()];
for(String i:words){
if(r1.contains(i)){
res[count++] = i;
}
}
return res;
}
任何关于更好方法的指导/见解或建议将不胜感激。
【问题讨论】:
-
一种方法可以是检查单词的形态。这比答案中建议的创建 trie 更复杂,但这可能是您可能感兴趣的一种方法,这是您可能会感兴趣的研究论文:biolinguistics.uqam.ca/Fiorentino_Poeppel_2007.pdf