【问题标题】:Recursive function to check whether sub-array递归函数检查是否子数组
【发布时间】:2012-06-05 08:48:29
【问题描述】:

我正在尝试编写一个递归函数来检查一个数组是否包含在第二个数组中(我的示例也是子数组)并返回 true 或 false。

例如:[d, e] 包含在 [a, b​​, c, d, e, f]

.

我知道如何在不使用递归的情况下进行检查(使用 for 循环),但想不出使用递归的解决方案。

【问题讨论】:

标签: java arrays recursion


【解决方案1】:

原理如下:

0) 如果第一个数组比第二个长,则它不是子数组。

1) 如果第二个数组以第一个数组开头(如 [a,b] 和 [a,b,c,d]),那么它就是一个子数组。

2) 否则:如果第一个数组是第二个数组的 tail 的子数组(即第一个元素之后的部分),那么它就是一个子数组。

只是为了确定:tail([a,b,c,d]) == [b,c,d](因为我不知道在 Java 中如何调用它。)

【讨论】:

  • 我假设 OP 正在寻找一个 subarray,而不是一个 subset - 所以实际上第一个是第二个的中缀。尽管他在描述中明确提到了 subarray ,但从问题中确实不清楚这一点 - 这就是我选择这个算法的原因。我会尽力澄清这一点。
【解决方案2】:

您可以使用散列将大数组的元素存储在哈希表中,然后检查子数组的每个元素是否存在于哈希表中,如果所有元素都找到则它将是子数组。

【讨论】:

  • 子数组有一个非常严格的定义。 [b c] 是 [a b c d] 的子数组,但 [c b] 不是。重要的是元素必须使子数组成为数组的“一部分”。
猜你喜欢
  • 2014-03-26
  • 2012-11-30
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2021-04-15
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多