C#数组子集提取我有一个字节数组,我想确定这个字节数组的内容是否作为一个连续序列存在于另一个更大的数组中。最简单的方法是什么?天真的方法是:publicstaticboolIsSubsetOf(byte[]set,byte[]subset){for(inti=0;i为了获得更有效的方法,您可以考虑使用更高级的字符串匹配算法,例如KMP。尝试采用一些字符串搜索算法。其中最快的是Boyer-Moore。它也很容易。对于二进制数据,Knuth-Morris-Pratt算法也非常有效。这是这个答案的1/1端口:SearchingforByteSequencesinBinaryFilesinJava这是一种非常高效的方式:用过,需要多了解C#学习教程。希望大家多多关注---publicstaticclassKmpSearch{publicstaticintIndexOf(byte[]data,byte[]pattern){int[]failure=ComputeFailure(pattern);整数j=0;如果(data.Length==0)返回-1;对于(inti=0;i0&&pattern[j]!=data[i]){j=failure[j-1];}if(pattern[j]==data[i]){j++;}if(j==pattern.Length){returni-pattern.Length+1;}}返回-1;}privatestaticint[]ComputeFailure(byte[]pattern){int[]failure=newint[pattern.Length];整数j=0;对于(inti=1;i0&&pattern[j]!=pattern[i]){j=failure[j-1];}if(pattern[j]==pattern[i]){j++;失败[i]=j;}返回失败;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
