返回类似数组的所有子序列,仅使用Java中的连续值

时间:2015-05-26 16:51:10

标签: java arrays subsequence

我试图在Java中解决的问题需要将输入数组划分为所有允许的子序列,其中允许的子序列仅包含连续值。例如,我希望{A,E,D}返回{A,E,D},{A,E},{A},{E,D},{D},{E}

这与this question不同(对于上面的例子)
  1)我有'连续值'规则,表示不允许{A,D}和
2)我不能在这里的答案中依赖Python语法。

我的问题,特别是如何将“连续值”规则实施到更一般的子序列问题。

到目前为止,我已经为例子{1,2,3}提出了一种算法:
1.复制{1,2,3}并存储在arr中 2.将{1,2,3}添加到溶液中,剥离3
3.将{1,2}附加到溶液中,剥离2
4.将{1}附加到解决方案。从arr中剪下1 5.将{2,3}附加到溶液上剥离3
6.将{2}附加到解决方案。从arr中剪下2 7.将{3}附加到解决方案

1 个答案:

答案 0 :(得分:4)

您应该能够简单地使用两个嵌套的for循环,如下所示:

// Setup
char[] arr = { 'A', 'E', 'D' };

// Generate all subsequences
List<char[]> result = new ArrayList<>();
for (int start = 0; start < arr.length; start++) {
    for (int end = start + 1; end <= arr.length; end++) {
        result.add(Arrays.copyOfRange(arr, start, end));
    }
}

// Print result
result.forEach(a -> System.out.println(Arrays.toString(a)));

<强>输出:

[A]
[A, E]
[A, E, D]
[E]
[E, D]
[D]