字符串匹配算法KMP

字符串匹配算法是一种高效率的字符串匹配算法,在面试中,经常会被问及到,考官经常会考察我们,代码如下:

       int[] nextKMP(string str)
        {
            int[] next = new int[str.Length];
            next[0] = -1;
            if (str.Length < 2)
                return next;
            next[1] = 0;
            int i = 2, j = 0;
            while(i < str.Length)
            {
                if(str[i-1] == str[j]){
                    next[i++] = ++j;
                }else{
                    j = next[j];
                    if(j == -1){
                        next[i++] = ++j;
                    }
                }
            }
            return next;
        }

        int executeKMP(string source, string pattern)
        {
            int[] next = nextKMP(pattern);
            int i = 0, j = 0;
            while (j < pattern.Length && i < source.Length)
            {
                if (source[i] == pattern[j])
                {
                    i++;
                    j++;
                }
                else
                {
                    j = next[j];
                    if (j == -1)
                    {
                        i++;
                        j++;
                    }
                }
            }
            return j < pattern.Length ? -1 : i - j;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 两个字符串A、B,在A字符串中查找B字符串(分别长为m,n),如果找到了,返回B字符串在A字符串中第一次出现的下标...
    Myth52125阅读 1,787评论 0 0
  • 字符串匹配算法之Sunday算法 背景 我们第一次接触字符串匹配,想到的肯定是直接用2个循环来遍历,这样代码虽然简...
    houskii阅读 13,366评论 10 25
  • 1.安慰最好的办法是倾听,不加评论。 2.西瓜、香蕉、菠萝都是外表坚硬而内柔弱,坚硬的外表是为了抵御外来的伤害而保...
    Eric小风阅读 1,001评论 0 0
  • Here I would like to tell you a story about a fat girl an...
    MiniKay阅读 1,891评论 0 0
  • 如果生命是一条河流,你愿意随我逆流而上吗? 我们年轻时候的很多话,现在你还记得吗?你说过的,那些懵懂的誓言会随...
    路人甲的配角阅读 3,332评论 0 0