字符串匹配算法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閱讀 266評論 0 0
  • 字符串匹配算法之Sunday算法 背景 我們第一次接觸字符串匹配,想到的肯定是直接用2個循環來遍歷,這樣代碼雖然簡...
    houskii閱讀 10,012評論 10 25
  • 1.安慰最好的辦法是傾聽,不加評論。 2.西瓜、香蕉、菠蘿都是外表堅硬而內柔弱,堅硬的外表是為了抵御外來的傷害而保...
    Eric小風閱讀 143評論 0 0
  • Here I would like to tell you a story about a fat girl an...
    MiniKay閱讀 274評論 0 0
  • 如果生命是一條河流,你愿意隨我逆流而上嗎? 我們年輕時候的很多話,現在你還記得嗎?你說過的,那些懵懂的誓言會隨...
    路人甲的配角閱讀 486評論 0 0