简单的单词查找器

时间:2016-01-29 20:46:02

标签: java arraylist collections set

我们必须从一堆简单和复合词中找到所有简单的单词。例如:
输入:聊天,永远,结婚,快照,销售人员,按人,销售,儿子,无论如何,这是什么。
输出应该:聊天,永远,快照,每次,销售,儿子,什么,所以

我的示例代码:

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

我无法通过上述代码获得解决方案。任何建议或想法

复合词=两个或多个单词的连接;其余所有单词都被视为简单单词 我们必须删除所有复合词

1 个答案:

答案 0 :(得分:0)

算法

  1. 将输入读入一组字符串,即Set<String> input
  2. 为简单字词创建空集,即Set<String> simpleWords
  3. 为复合词创建一个空集,即Set<String> compoundWords
  4. 迭代input。对于每个element
    1. element的长度为elemLength
    2. 从集合Set<String> inputs(不包括input)创建所有字符串集合element,其中以下为真
      1. 长度小于element
      2. compundWords
      3. 中不存在
    3. 创建inputs的所有排列集合(通过连接),最大长度= elemLength,即Set<String> currentPermutations
    4. 查看currentPermutations中是否有{= element
      1. 如果是,请将element添加到compoundWords
      2. 如果不是,请继续迭代
  5. 迭代完成后,将input中不存在的compoundWords中的所有字符串放入simpleWords
  6. 这是你的答案。

    在开始编写代码之前,请确定要使用的逻辑。使用描述性变量名称基本完成。

    您的逻辑不起作用的原因与您检查temp.contains(check)的方式有关。这是根据您的定义检查子字符串而不是复合词。