算法-KMP-C++

   kmp算法中的经典,应用于字符串匹配的问题。
   给定两个串:str="acbc" match=“bc” 返回2
                        str="acbc" match="bcc" 返回-1
   本人水平有限只简单描述一下求解过程,如果要对算法本身有了解,需要找相关的资料再看看,比如next数组中的前缀后缀最大匹配长度的计算。  

1.暴力方法:
    str1:0          1           2
    str2:0...m    0....m   0...m
所有位置匹配一遍

2.KMP
    1.求str2的next数组。
    2. str1 x   不匹配时,x不动 y 跳转到 next数组对应位置,而不是回到0位置
        str2 y

using namespace std;
typedef vector<int> vci;
    int getIndexOf(string s, string m) 
    {
        if (s == "" || m == "" || m.length() < 1 || s.length() < m.length())
        {
            return -1;
        }

        int X = 0;                            //str1中比对到的位置
        int Y= 0;                             //str2中比对到的位置

        vci next = getNextArray(m);           //str2的next数组
        while (X < s.length() && Y < m.length()) // XY不越界
        {
            if (s[X] == m[Y])                  //1.匹配 继续
            {
                X++;
                Y++;
            }
            else if (next[Y] == -1)           // 2.匹配不上 ,str1换位置  
            { 
                 X++;
            }
             else                            //3.Ynext数组值不是-1 X停不变,Y往前跳
            {   
             Y = next[Y];
             }
         }      
        return Y == m.size() ? X - Y : -1; 
    }

      
 

 

 

原文链接: https://www.cnblogs.com/jasmineTang/p/14369257.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    算法-KMP-C++

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/331963

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午6:17
下一篇 2023年3月1日 下午6:18

相关推荐