首页 > 解决方案 > 检查子列表是否以相同的顺序在列表中

问题描述

我正在尝试找到一种方法来检查一个列表的元素是否以 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;
}

有可能实现这一目标吗?

标签: javaarrayslistcomparesublist

解决方案


尝试这个。

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

推荐阅读