您的位置:首页 > 编程语言 > C#

KMP算法C#实现

2013-12-14 16:18 281 查看
next函数 求出模式串 向右滑动位数

将模式串的str的next函数值 存入 数组next

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];

                }

            }

}

KMP算法

        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);

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp 算法 c# .net 4.0 string