如何在满足标准的矩阵中获得最长的连续序列?

时间:2014-11-05 02:59:05

标签: clojure

我有一个矩阵,其中每个向量都由哈希映射组成。这是一个玩具示例:

[
    [{:label x, ...}, {:label y, ...}, ...]
    [{:label y, ...}, {:label z, ...}, ...]
    [{:label p, ...}, {:label x, ...}, ...]
    ...
    [{:label x, ...}, {:label x, ...}, ...]
]

因为只有标签与我的问题相关,所以我删除了其他内容。

现在,我想要做的是每行,计算连续标签的最长序列。也就是说,如果行的标签为A B B B A A C A,则最长的序列为B B B。我想要返回的是1)的元组,其中行k具有最长的这样的序列(在结合的情况下任何最长的是好的),以及2)索引i是什么序列中的第一项是,以及3)序列中最后一项的索引j是什么。

因此,对于这个简化的矩阵,那将是k = 1, i = 2, j = 5

[
    [A B B A A C]
    [C B A A A A]
    [B A C A B A]
]

我是函数式编程的新手,到目前为止我真的非常喜欢它,但我无法在不诉诸于此的情况下弄清楚如何做到这一点。我的原生php的foreach循环。我不是在寻找某人为我做的一切,但是在正确的方向上提示会非常感激。谢谢。

1 个答案:

答案 0 :(得分:2)

(def m "ABBAAAC")

(->> m (map-indexed vector)  
       (partition-by #(-> % second identity))
       (sort-by count >) 
       (first))

给出:

([3 \A] [4 \A] [5 \A])