java - 检查子列表是否以相同的顺序在列表中
问题描述
我正在尝试找到一种方法来检查一个列表的元素是否以 Java 中的相同顺序出现在另一个列表中。例如:
char[] list = {'A','B','B','C','B','D'};
char[] sublist = {'B','C','B'};
char[] sublist2 = {'A','B','D'};
它应该为 sublist 返回 true,但为 sublist2 返回 false(因为它们的出现顺序不同)。我主要是尝试使用带有一些 while 和一些 if 的 for 循环(尽量不使用一些内置函数,可能除了长度之外)。
我试过了,但我认为它不正确(得到错误的答案):
public static boolean subList(char[] list, char[] sublist) {
for (int i = 0; i < sublist.length; i++) {
for (int j = 0; j < list.length; j++) {
if (sublist[i] == list[j]) {
break;
}
}
return true;
}
return false;
}
有可能实现这一目标吗?
解决方案
尝试这个。
public static boolean subList(char[] list, char[] sublist) {
L: for (int i = 0, max = list.length - sublist.length; i <= max; i++) {
for (int j = 0, k = i; j < sublist.length; j++, k++)
if (sublist[j] != list[k])
continue L;
return true;
}
return false;
}
public static void main(String[] args) throws InterruptedException {
char[] list = {'A', 'B', 'B', 'C', 'B', 'D'};
char[] sublist = {'B', 'C', 'B'};
char[] sublist2 = {'A', 'B', 'D'};
System.out.println(subList(list, sublist));
System.out.println(subList(list, sublist2));
}
输出:
true
false