gpt4 book ai didi

c# - 如何确定一个数组是另一个数组的一部分?

转载 作者:太空狗 更新时间:2023-10-29 23:10:59 27 4
gpt4 key购买 nike

例如:我有数组

var src = new byte[] {1, 2, 3, 4, 5};
var tag = new byte[] {3, 4};

谁知道快速查找标签数组索引的方法?我需要如下内容:

int FindIndexOfSeq(byte[] src, byte[] sequence);

一个序列在src中可以出现多次

解决方案:How to find index of sublist in list?

最佳答案

你能得到的最好的是 O(m),但我的实现有点复杂。如果您对最坏情况为 O(m*n) 的解决方案感到满意,您可以使用下面的解决方案。如果您的序列是有序的,并且 tag 数组中的起始项仅在 src 中出现一次,这也会导致 O(m)。

class Program
{
static void Main(string[] args)
{
var src = new byte[] { 1, 2, 3, 4, 5 };
var tag = new byte[] { 3, 4 };
var index = FindIndexOfSeq(src, tag);
Console.WriteLine(index);
Console.ReadLine();
}
static int FindIndexOfSeq<T>(T[] src, T[] seq)
{
int index = -1;
for (int i = 0; i < src.Length - seq.Length + 1; i++)
{
bool foundSeq = true;
for (int j = 0; j < seq.Length; j++)
{
foundSeq = foundSeq && src[i + j].Equals(seq[j]);
}
if (foundSeq)
{
index = i;
break;
}
}
return index;
}
}

我假设序列必须按照那个顺序,我只在 firefox 中编译它,所以不确定它是否有效 :)。此外,我将其设为通用的,因此它可以处理任何类型的数组,而不仅仅是字节。

更新:更新后的代码可以编译并工作...或者我的简单测试工作。

关于c# - 如何确定一个数组是另一个数组的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658305/

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