来自源和前缀的合并列表

时间:2012-04-18 21:43:20

标签: java

我在学校得到了以下这个问题,我已经解决了我的理解和解决方案如下。有人可以帮我提供一个更好的解决方案。

问题:

  

生成一个软件应用程序,该应用程序创建两个不区分大小写的排序列表的过滤合并。第一个输入列表被指定为源列表,另一个被指定为前缀列表。应用程序将使用以下算法生成包含来自源和前缀列表的项目的合并列表:

     

当且仅当下列之一为真时,项目X才在合并列表中:

     

a)X来自Source列表,并且Prefixes列表中有一个Y项,它是X的不区分大小写的字符串前缀。

     

b)X来自前缀列表,并且源列表中没有项,其中X是不区分大小写的字符串前缀。

     

完成的合并列表应与原始两个列表中的项目的排序顺序相同。

我的解决方案:

public ArrayList<String> merge(List<String> srcList, List<String> preList) {
        // If Prefixes list is empty then there cannot be a new merge list
        if (preList.isEmpty()) {
            return null;
        }
        int i = 0, j = 0;
        int sourcesListSize = srcList.size();
        int prefixesListSize = preList.size();
        ArrayList<String> mergeList = new ArrayList<String>();
        // Loop through Sources list until end of the list is reached
        //ASSUMPTION: Both SourceList and PrefixList are already sorted.
        while (i < sourcesListSize && j<prefixesListSize) {
            mergeList.add(preList.get(j).concat(srcList.get(i)));
            i++;
            j++;
        }
        // If Prefixes list still have items, then add it to mergeList
        while (j < prefixesListSize) {
            mergeList.add(preList.get(j));
            j++;
        }
        return mergeList;

    }

输入:

  • 来源清单:{"pple","ow","enver",pic,"ull"}
  • PrefixList:{"a","c","d","e","f"}

MergeList={"apple",cow","denver","epic","full"}

我的理解是否正确?有没有最好的其他解决方案?

1 个答案:

答案 0 :(得分:1)

由于这是作业,我会尽量不要放弃,但根据prefix的定义,这里有一些例子:

  

“a”是“Apple”的前缀

     

“cow”是“Cow”的前缀

     

“g”是“Zoo”的前缀

     

“col”是“酷”的前缀

基于此,MergeList将用于以下内容?提示:正确的MergeList中的SourceList和PrefixList都有项目。发布你的解决方案,我会批评它。一旦了解了这部分的工作原理,您就可以更好地了解如何编写解决方案。

  

SourceList:{“Apple”,“Pepper”,“Denver”,“Garage”,“Zoo”}

     

PrefixList:{“a”,“d”,“pe”,“xylophone”,“e”}