KMP学习
2024-10-10 13:28:30
刚才看了(连接)写的翻译,把kmp算法的工作过程讲的很不错,kmp算法的核心是next,next为什么要那么赋值?其实就是前缀和后缀的最大匹配值,用这个值在匹配失败的时候可以跳过一个不必要的匹配。
移动的位数 = 已匹配的字符数 - 对应部分的匹配值(也就是前缀和后缀的最大相等值)。
为什么要这么移动呢?其实仔细想想也是可以明白的,首先必须明白被匹配的串是不会移动的,我们不会回去再重新匹配,所以只能移动模式串,模式前缀和后缀相等的很明显是可以不用在匹配了,比较感性的理解。
这是求next数组的函数
void FindNext(char s[], int next[])
{///因为匹配的时候当前不成功要找寻前面匹配成功的,所以当前保存前面的串,方便操作
int j=-, i=, len = strlen(s);
next[] = -;
while(i < len)
{
if(j==- || s[i]==s[j])
next[++i] = ++j;
else
j = next[j];
}
}
最新文章
- 【Unity Shaders】学习笔记
- MySQL问题记录--python插入中文至MySQL提示SQLErroor:1366错误
- /etc/hosts文件设置不对导致Jboss启动失败
- Windows7给C盘扩容
- maven总结3
- [Design Pattern] Mediator Pattern 简单案例
- 在CG/HLSL中访问着色器属性(Properties)
- leetcode[70] Simplify Path
- linux ssh连接不自动断开
- 纯css实现select下拉框并排显示
- C++ STL的一些操作
- photoshop改变图片大小,不改变像素
- windows下Qt播放flash
- Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式2
- 流水的新技术,铁打的Linux
- c# mvc 获取 HtmlHelper 表达式值和时间格式化 去边框
- WAS启动报错Service failed to start. startServer return code = -1
- 去除eclipse的validating
- Gitlab-system-hooks
- DFS剪枝,最大团,POJ(1419)