zoukankan      html  css  js  c++  java
  • C#实现KMP算法

    看了两天的KMP算法,总有有点懂了,这篇文章的帮助很大。依样画瓢写了个C#的KMP算法实现。

    以下是代码:

           

            /// <summary>
            /// 串的模式匹配 KMP算法
            /// </summary>
            /// <param name="str"></param>
            /// <param name="model"></param>
            /// <param name="pos"></param>
            /// <returns></returns>
            private static int KmpMatch(char[] str, char[] model,int pos)
            {
                int loc = -1;
                if (pos < 1 || pos > str.Length)
                {
                    return loc;
                }
    
                int i = pos - 1;
                int j = 0;
                int[] next = GetNext(model);
    
                while (i < str.Length && j < model.Length)
                {
                    if (j == -1 || str[i] == model[j])
                    {
                        i++;
                        j++;
                    }
                    else
                        j = next[j];
                }
                if (j >= model.Length)
                    loc = i - model.Length;
    
                return loc;
            }
    
            /// <summary>
            /// 求next[]
            /// </summary>
            /// <param name="T"></param>
            /// <returns></returns>
            private static int[] GetNext(char[] T)
            {
                int[] next = new int[T.Length];
                next[0] = -1;
    
    
                int i = 0, j = -1;
    
                while (i < T.Length - 1)
                {
                    if (j == -1 || T[i] == T[j])
                    {
                        ++i; ++j;
                        if (T[i] != T[j])
                            next[i] = j;
                        else
                            next[i] = next[j];
                    }
                    else
                        j = next[j];
                }
    
                return next;
            }
  • 相关阅读:
    C语言-typedef和#define
    C语言-指针
    C语言-数据结构-结构体
    数据结构笔记
    树的存储结构
    树的基本知识
    关于矩阵
    LaTex
    札记-碎碎念
    一个大神的个人博客 博客桌面风格很棒 二次元
  • 原文地址:https://www.cnblogs.com/kangs/p/3197921.html
Copyright © 2011-2022 走看看