gpt4 book ai didi

ruby - 数组的最长公共(public)前缀和后缀

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:58 26 4
gpt4 key购买 nike

获得两个数组的最长公共(public)前缀(从原始索引 0 开始的子数组)和后缀(以原始索引 -1 结束的子数组)的最佳方法是什么?例如,给定两个数组:

[:foo, 1, :foo, 0, nil, :bar, "baz", false]
[:foo, 1, :foo, 0, true, :bar, false]

这些数组的最长公共(public)前缀是:

[:foo, 1, :foo, 0]

这些数组的最长公共(public)后缀是:

[false]

当索引 0/-1 处的元素在原始数组中不同时,公共(public)前缀/后缀应为空数组。

最佳答案

一种可能的解决方案:

a1 = [:foo, 1, 0, nil, :bar, "baz", false]
a2 = [:foo, 1, 0, true, :bar, false]

a1.zip(a2).take_while { |x, y| x == y }.map(&:first)
#=> [:foo, 1, 0]

反转输入数组和输出数组找到一个共同的后缀:

a1.reverse.zip(a2.reverse).take_while { |x, y| x == y }.map(&:first).reverse
#=> [false]

边缘情况:zipnil 值填充“argument”数组:

a1 = [true, nil, nil]
a2 = [true]

a1.zip(a2).take_while { |x, y| x == y }.map(&:first)
#=> [true, nil, nil]

这可以通过将初始数组截断为第二个数组的长度来避免:

a1[0...a2.size].zip(a2).take_while { |x, y| x == y }.map(&:first)

关于ruby - 数组的最长公共(public)前缀和后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25406102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com