【问题标题】:Simple words finder简单的单词查找器
【发布时间】:2016-01-29 20:46:02
【问题描述】:

我们必须从一堆简单词和复合词中找出所有的简单词。例如:
输入:chat、ever、snapchat、snap、salesperson、per、person、sales、son、whatever、what so。
输出应该是: chat, ever, snap, per, sales, son, what, so

我的示例代码:

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

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

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

【问题讨论】:

  • 好的,现在怎么办;你有问题吗?
  • 观察到的行为是什么?
  • 我无法得到儿子,因为它已经添加到我的列表中,而儿子正在被删除@atri
  • 这道题中简单词的定义是什么?

标签: java arraylist collections set


【解决方案1】:

算法

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

这就是你的答案。

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

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

【讨论】:

  • 我不明白你关于串联的第三点,你能否详细说明@aseembansal
  • @tejachilled 假设你有“snapchat,snap,chat”。您正在使用 element = snapchat 进行迭代。然后输入将具有“快照,聊天”。现在您创建连接 - snapchat、chatsnap。然后检查元素是否是其中之一。
  • @tejachilled 如果有任何答案真正回答了您的问题,那么您应该接受它。
  • 如果你能写一个有效的代码或者给我一个清晰的解决方案,我会接受的。 @aseembansal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2019-11-20
  • 2014-05-09
  • 2015-11-19
  • 2015-04-18
相关资源
最近更新 更多