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大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/331963
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!