java - 比较两个复杂的字符串数组列表
问题描述
我有 Two ArrayList
s,其中存储了 String 值。列表可以是:大小不同,每个列表具有相同的值和不同的不匹配字符串。
例子:
List 1: "a","b","b","c","e","a","e","f","g";
List 2: "a","a","b","c","a","e","a","d","f","e","e","g";
我想要得到的结果是列表 1 与列表 2 相比的匹配值。因此,示例的结果将是:
结果:
[String] [pos L1] [pos L2]
["a"] [0] [0]
["b"] [1] [2]
["c"] [3] [3]
["e"] [4] [5]
["a"] [5] [6]
["e"] [6] [9]
["g"] [8] [11]
解决方案
执行两个嵌套循环,并从您在内部循环的最后一次迭代中停止的索引开始在第二个循环中进行迭代:
public static List<String> algo(List<String> l1, List<String> l2) {
List<String> result = new ArrayList<>();
int lastIndexFound = 0;
for(int i = 0; i < l1.size(); i++) {
for(int j = lastIndexFound; j < l2.size(); j++) {
String list1element = l1.get(i);
String list2element = l2.get(j);
if(list1element.equals(list2element)) {
result.add(list1element);
lastIndexFound = j + 1;
break;
}
}
}
return result;
}
用于检测 :
List<String> list = Lists.newArrayList("a","b","b","c","e","a","e","f","g");
List<String> list2 = Lists.newArrayList("a","a","b","c","a","e","a","d","f","e","e","g");
algo(list, list2).forEach(System.out::println);
这输出:
a
b
c
e
a
e
g
推荐阅读
- php - 如何在控制器上使用 Twig 过滤器“time_diff”?
- javascript - 帮助文件和外部函数的 Jest 测试
- javascript - JavaScript (PWA) - 初始化服务工作者的正确方法是什么?
- angular - 量角器 - 配置文件“tsconfig.json”中的“文件”列表为空。(18002)
- css - Primeng DialogService 防止半像素
- r - 线性模型诊断:在 ggplot2 中获得的平滑线与使用基图获得的平滑线不同
- c++ - 如何使用 Sieve of Eratosthenes 算法改进我的素数程序?
- odoo-9 - 验证后如何更改发票到期日
- android - Android Studio 冻结,工具栏分离
- git - 获取关联的 JIRA 状态关闭的分支名称