0

我在学校遇到过以下问题,我已经根据我的理解解决了,解决方案如下。有人可以帮我提供一个更好的解决方案吗?

问题:

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

当且仅当满足以下条件之一时,项目 X 才在合并列表中:

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

b) X 来自 Prefixes 列表,并且 Source 列表中没有 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"}
  • 前缀列表:{"a","c","d","e","f"}

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

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

4

1 回答 1

1

由于这是家庭作业,我会尽量不提供太多内容,但根据prefix的定义,这里有一些示例:

“a”是“Apple”的前缀

“牛”是“牛”的前缀

“g”不是“Zoo”的前缀

“col”不是“cool”的前缀

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

SourceList : {"Apple","Pepper","Denver", "Garage", "Zoo"}

前缀列表:{"a","d","pe","xylophone","e"}

于 2012-04-19T05:15:51.897 回答