我在学校遇到过以下问题,我已经根据我的理解解决了,解决方案如下。有人可以帮我提供一个更好的解决方案吗?
问题:
生成一个软件应用程序,该应用程序创建两个不区分大小写的排序列表的过滤合并。第一个输入列表被指定为源列表,另一个为前缀列表。应用程序将使用以下算法生成一个合并列表,其中包含来自 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"}
我的理解正确吗?有没有其他最好的解决方案?