ruby – 最长的公共前缀和数组后缀
发布时间:2020-12-17 02:47:34 所属栏目:百科 来源:网络整理
导读:获取两个数组的最长公共前缀(从原始索引0开始的子数组)和后缀(以原始索引-1结尾的子数组)的最佳方法是什么?例如,给定两个数组: [:foo,1,:foo,nil,:bar,"baz",false][:foo,true,false] 这些数组的最长公共前缀是: [:foo,0] 并且这些数组的最长公共后缀是:
获取两个数组的最长公共前缀(从原始索引0开始的子数组)和后缀(以原始索引-1结尾的子数组)的最佳方法是什么?例如,给定两个数组:
[:foo,1,:foo,nil,:bar,"baz",false] [:foo,true,false] 这些数组的最长公共前缀是: [:foo,0] 并且这些数组的最长公共后缀是: [false] 当索引0 / -1处的元素在原始数组中不同时,公共前缀/后缀应该是空数组. 解决方法
一种可能的方案:
a1 = [:foo,false] a2 = [:foo,false] a1.zip(a2).take_while { |x,y| x == y }.map(&:first) #=> [:foo,0] 反转输入数组和输出数组会找到一个公共后缀: a1.reverse.zip(a2.reverse).take_while { |x,y| x == y }.map(&:first).reverse #=> [false] 边缘情况:zip填充带有nil值的“argument”数组: a1 = [true,nil] a2 = [true] a1.zip(a2).take_while { |x,y| x == y }.map(&:first) #=> [true,nil] 通过将初始数组截断为第二个数组的长度可以避免这种情况: a1[0...a2.size].zip(a2).take_while { |x,y| x == y }.map(&:first) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |