KMP算法实现

来源:互联网 发布:ubuntu系统最合理分区 编辑:程序博客网 时间:2024/06/06 11:43

class Program
{
static void GetNextVal(string str, int [] next)
{
int i = 0;
int j = -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];
}
}

}

    static int KMP(string zstr, string mstr)    {        int i, j;        int[] next = new int[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)            return i - mstr.Length;        return -1;    }    static void Main(string[] args)    {        string zstr, mstr;        zstr = Console.ReadLine();        mstr = Console.ReadLine();        int pos1;        pos1 = KMP(zstr, mstr);        if (pos1 == -1) Console.WriteLine("没有匹配的字符串!");        else Console.WriteLine(pos1);        Console.Write("请按任意键继续。。");        Console.ReadKey(true);    }}
0 0
原创粉丝点击