比如[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]
如何用 Ruby 实现查找重复的片段[1, 2, 3]及其位置呢?尤其是数组极大的情况下,如何更有效率的求得所有重复片段?
[1, 2, 3]
目前暂定的想法是利用相邻数之和先判断一次循环中所有分割出的片段是否含相同元素,然后再转化为字符串检查两片段是否相等。
各位还有更好的想法没?
何为重复片断?1算不算?1,2算不算?
1
1,2
没看懂
#1 楼 @zhaoguobin 算啊,数组长度 2 以上的都算片段吧。
class Array #返回一个数组在另一个数组的所有索引 def index_arr(arr) indexs = [] (0..self.length).each do |i| indexs << i if self[(i...i+arr.length)] == arr end indexs end #统计一个数组在另一个数组出现的次数,允许重叠 def count_arr(arr) count = 0 (0..self.length).each do |i| count = count + 1 if self[(i...i+arr.length)] == arr end count end #统计一个数组在另一个数组出现的次数,重叠的不算 def count_arr1(arr) count = 0 i = 0 len = self.length while i < len if self[(i...i+arr.length)] == arr count = count + 1 i = i + arr.length else i = i + 1 end end count end end a = [0, 6, 4, 1, 2, 3, 1, 2, 3, 1, 3, 4] a_tmp = [] (0..a.length).each do |i| (0..a.length).each do |m| a_tmp << a[i..m] if m > i end end a_tmp = a_tmp.uniq.select{ |i| i.length>1 } a_tmp = a_tmp.sort_by{ |i| -i.length }.select{ |i| a.count_arr(i)>1 }.collect{ |i| [i, a.index_arr(i)] } a_tmp.each{ |i| p i }
视频的编码解码? KMP 算法 http://www.google.com.hk/#hl=zh-CN&newwindow=1&safe=strict&sa=X&ei=OtPVT9q9IqW9iAerl8ieAw&ved=0CAYQvwUoAQ&q=kmp%E7%AE%97%E6%B3%95&spell=1&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=60dd955e222a4ae4&biw=1366&bih=680