我们必须从一堆简单和复合词中找到所有简单的单词。例如:
输入:聊天,永远,结婚,快照,销售人员,按人,销售,儿子,无论如何,这是什么。
输出应该:聊天,永远,快照,每次,销售,儿子,什么,所以
我的示例代码:
private static String[] find(String[] words) {
// TODO Auto-generated method stub
//System.out.println();
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();
}
});
//System.out.println(alist.toString());
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;
}
我无法通过上述代码获得解决方案。任何建议或想法
复合词=两个或多个单词的连接;其余所有单词都被视为简单单词 我们必须删除所有复合词
答案 0 :(得分:0)
算法
Set<String> input
Set<String> simpleWords
Set<String> compoundWords
input
。对于每个element
element
的长度为elemLength
Set<String> inputs
(不包括input
)创建所有字符串集合element
,其中以下为真
element
compundWords
inputs
的所有排列集合(通过连接),最大长度= elemLength
,即Set<String> currentPermutations
currentPermutations
中是否有{= element
element
添加到compoundWords
input
中不存在的compoundWords
中的所有字符串放入simpleWords
这是你的答案。
在开始编写代码之前,请确定要使用的逻辑。使用描述性变量名称基本完成。
您的逻辑不起作用的原因与您检查temp.contains(check)
的方式有关。这是根据您的定义检查子字符串而不是复合词。