C# 如何在C语言中找到最长的颜色序列#

C# 如何在C语言中找到最长的颜色序列#,c#,linq,logic,sequence,C#,Linq,Logic,Sequence,如何从下面的最后5种颜色中计算两种颜色的最长序列(使用C#) 在上面的预期顺序中是“黄”、“绿”、“黄”、“黄”。试试这个: var colorValues = new[] { "Blue", "Yellow", "Black", "Yellow", "Green", "Yellow", "Yellow", "Red" }; var query = from n in Enumerable.Range(0, colorValues.Length) from l

如何从下面的最后5种颜色中计算两种颜色的最长序列(使用C#)

在上面的预期顺序中是“黄”、“绿”、“黄”、“黄”。

试试这个:

var colorValues = new[]
{
    "Blue", "Yellow", "Black", "Yellow",
    "Green", "Yellow", "Yellow", "Red"
};

var query =
    from n in Enumerable.Range(0, colorValues.Length)
    from l in Enumerable.Range(1, colorValues.Length - n)
    let subseq = colorValues.Skip(n).Take(l).ToArray()
    where subseq.Distinct().Count() == 2
    orderby subseq.Count() descending
    select subseq;

Console.WriteLine(String.Join(", ", query.First()));
它给出:

黄,绿,黄,黄


你可以使用一个基于Jay Kadane开发的算法来解决@ZoharPeled问题谢谢你的快速回复,你有c#的例子吗?没有,我手头没有c#实现,但这不是一个很难实现的算法,您可能会在web上的某个地方发现它是用c#实现的。在给定的示例中,选择
绿色
和拒绝
黑色
的任何具体原因,即使它们的长度相同?OP和up投票者可能应该为一个可以说是一组要求或家庭作业的问题刷新自己。
var colorValues = new[]
{
    "Blue", "Yellow", "Black", "Yellow",
    "Green", "Yellow", "Yellow", "Red"
};

var query =
    from n in Enumerable.Range(0, colorValues.Length)
    from l in Enumerable.Range(1, colorValues.Length - n)
    let subseq = colorValues.Skip(n).Take(l).ToArray()
    where subseq.Distinct().Count() == 2
    orderby subseq.Count() descending
    select subseq;

Console.WriteLine(String.Join(", ", query.First()));