0

假设我有以下序列ArrayList<Integer>

1 2 3 4 1 2 3 4 5 6

我需要知道序列 (1,2,3,4) 出现在列表中的次数。

对于这个例子,答案是 2!

我需要 2 个解决方案,一个,数字需要按照以下顺序 (1,2,3,4),另一个不按照顺序 (4,1,2,3)

我正在使用Java,在此先感谢。

我尝试了什么:检查序列,如果它是真的:

        AnotherList.add(Integer.valueOf(1));
        AnotherList.add(Integer.valueOf(2));
        AnotherList.add(Integer.valueOf(3));
        AnotherList.add(Integer.valueOf(4));
        if(TheList.containsAll(AnotherList))
            TheList.removeAll(AnotherList);

但是当我这样做时,它会删除我列表中的所有 1、2、3 和 4。

4

1 回答 1

1

假设您不能重叠计数(因此列表中的 1,1,1,1 与 (1,1,1) 作为序列为您提供 1)。

在算法中,您可以自己编写代码(在我看到问题取得实质性进展之前,我不会给您伪代码):

使用循环,查看列表中的当前数字是否与序列中的第一个数字匹配。如果不匹配,请移至列表中的下一个数字。如果匹配,则移动到列表中的下一个数字,但也会按顺序递增到下一个数字。如果序列中的所有数字都匹配,则加 1 计数。到达列表末尾后返回计数。

第二部分,列出您的序列的所有组合(使用堆栈或递归)。像以前一样做,但与组合列表中的每个项目进行比较,直到你得到一个完整的匹配。一旦匹配,跳到列表中最后一个匹配字符的末尾并重复。

于 2013-09-04T00:57:38.117 回答