KMP算法的C#实现方法
本文实例简述了KMP算法的C#实现方法,分享给大家供大家参考。具体如下:
具体思路为:next函数求出模式串向右滑动位数,再将模式串的str的next函数值存入数组next。
具体实现代码如下:
staticvoidGetNextVal(stringstr,int[]next)
{
inti=0;
intj=-1;
next[0]=-1;
while(i<str.Length-1)
{
if(j==-1||str[i]==str[j])
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
KMP算法代码如下:
staticintKMP(stringzstr,stringmstr)
{
inti,j;
int[]next=newint[mstr.Length];
GetNextVal(mstr,next);
i=0;
j=0;
while(i<zstr.Length&&j<mstr.Length)
{
if(j==-1||zstr[i]==mstr[j])
{
++i;
++j;
}
else
{
j=next[j];
}
}
if(j==mstr.Length)
returni-mstr.Length;
return-1;
}
staticvoidMain(string[]args)
{
stringzstr,mstr;
zstr=Console.ReadLine();
mstr=Console.ReadLine();
intpos1;
pos1=KMP(zstr,mstr);
if(pos1==-1)Console.WriteLine("没有匹配的字符串!");
elseConsole.WriteLine(pos1);
Console.Write("请按任意键继续。。");
Console.ReadKey(true);
}
}
希望本文所述对大家的C#程序设计有所帮助。