gpt4 book ai didi

java - java中如何检查一个列表是否是另一个列表的子集?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:40 25 4
gpt4 key购买 nike

我正在尝试检查一个列表是否是 java 中另一个列表的子集。我使用 for 循环来检查元素,并且有一个名为 Same 的变量,每次元素相同时该变量都会递增。问题是列表仅当元素位于相同位置时才返回 true

例如:

(0,1) (0,1,2,3 ) true
(1,0) (0,1,2,3) false

我编写了以下代码:

public Boolean contains(ItemsList ilist) {
int same = 0;

if (empty()) {
return false;
} else {
ItemNode a = this.first;
ItemNode b = ilist.first;

for (b = ilist.first; b != null; b = b.next) {
for (a = this.first; a != null; a = a.next) {
if (a.item == b.item) {
same++;
}
}
}
}

return (same > 0);
}

最佳答案

解决这个问题的方法与解决子串匹配问题非常相似。

首先检查假定子集列表的第一个元素(以下称为 SSL)。

一旦找到匹配项,请记下索引(此后在找到匹配项的主列表中将称为 myGuy),继续检查 SSL 的后续元素是否与主列表匹配。

如果您的比赛已完成,则只需返回即可。如果没有,那么您可以选择两者之一。如果主列表还有剩余元素,则递增 myGuy,然后它将成为您在主列表中开始迭代的新索引。
如果没有留下任何元素并且仍然没有完全匹配,那么它不是子集。

以下是在 Java 中执行此操作的方法:

private static boolean checkSubList(int[] mainList, int[] subList) {
int currentIteratingPointer;
int matchCounter = 0;

for (int i = 0; i < mainList.length; i++) {
currentIteratingPointer = i;
for (int j = 0; j < subList.length; j++) {
if (mainList[currentIteratingPointer] == subList[j]) {
System.out.println(mainList[currentIteratingPointer]);
++matchCounter;
++currentIteratingPointer;
} else {
--matchCounter;
break;
}
}

i = currentIteratingPointer;
}

return matchCounter == subList.length; // You can count the number of occurance of the sublist if you change
// it to int and return the matchCounter a
}

关于java - java中如何检查一个列表是否是另一个列表的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59049534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com