检查arraylist是否包含前缀

时间:2015-03-19 20:45:10

标签: java algorithm arraylist

所以我试图解决这个算法,但我无法理解它。

我有一个算法,需要两个arraylists,一个包含源词,一个包含前缀。源列表将包含car,hello,goodbye等单词。前缀将包含c,hel,goo,hi等内容。它将检查前缀是否在源列表中,并将该源项添加到合并列表中。我这部分工作得很好。我的问题是我还需要在源代码中使用一个没有匹配的前缀,并将其添加到合并列表中。

到目前为止,我的算法将为源列表中的每个单词添加前缀,例如前缀c,它将返回c两次,因为hello和goodbye不包含c。问题是它根本不应该返回c,因为c在源列表中有匹配。我似乎无法绕过这个算法。

我现在只使用伪代码,因为我主要想要逻辑方面的帮助,或者通过单词或编码示例来解释。以下应输出此列表(cat,dog,vi),因为cat和dog都有前缀,而vi是没有源的前缀,因此应将其添加到列表中。

算法:

arraylist source (cat, dog, vehicle)
arraylist prefix (c, do, vi)
Method: Pass in two arraylists source and prefix
arraylist mergedlist
for (int x - prefix) //loop through prefix list
  for (int y - source) //loop through source list
    if source startsWith prefix
      add that source item to merged list

我代表的代码很有用。我尝试在if语句之后添加一个方法,如下所示:

if source DOES NOT start with prefix
  add that prefix to list

显然这不足以发挥作用,但我不知道还能做些什么。这只会在每次前缀与正在与之比较的源词匹配时添加前缀。

1 个答案:

答案 0 :(得分:0)

您可以再创建一个列表 - unusedPrefixes - 然后在结尾处将该列表添加到mergedList。这最终会占用更多内存。

arraylist source (cat, dog, vehicle)
arraylist prefix (c, do, vi)
Method: Pass in two arraylists source and prefix
arraylist mergedlist, unusedPrefixes
for (int x - prefix) //loop through prefix list
  bool used = false;
  for (int y - source) //loop through source list
    if source startsWith prefix
      add that source item to merged list
      used = true;
  if !used
    add prefix to unusedPrefixes
add unusedPrefixes to mergedList