第3章:LeetCode--算法:strStr KMP算法
https://leetcode.com/problems/implement-strstr/ 28. Implement strStr()
暴力算法:
int ViolentMatch(char* s, char* p)
{
int sLen = strlen(s);
int pLen = strlen(p); int i = ;
int j = ;
while (i < sLen && j < pLen)
{
if (s[i] == p[j])
{
//①如果当前字符匹配成功(即S[i] == P[j]),则i++,j++
i++;
j++;
}
else
{
//②如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0
i = i - j + ;
j = ;
}
}
//匹配成功,返回模式串p在文本串s中的位置,否则返回-1
if (j == pLen)
return i - j;
else
return -;
}
KMP(Knuth-Morris-Pratt)算法:
当T[i] != P[j]时
有T[i-j ~ i-1] == P[0 ~ j-1]
由P[0 ~ k-1] == P[j-k ~ j-1]
必然:T[i-k ~ i-1] == P[0 ~ k-1] -->because k<j
class Solution {
public:
void GenNext(string p, int next[]){
int plen = p.size();
next[0] = 0;
int j = 0;
for(int i=1; i<plen; ){
if(p[j] == p[i]){
next[i] = j+1;
j++;
i++;
}
else{
if(j!=0)
j = next[j-1];
else{
next[i] = 0;
i++;
}
}
}
}
int strStr(string haystack, string needle) {
int slen = haystack.size();
int plen = needle.size();
if(slen < plen) return -1;
if(needle == "" ||haystack == "") return 0;
int i=0, j=0;
int next[plen];
GenNext(needle, next);
while(i<slen && j<plen){
if(haystack[i]==needle[j]){
i++;
j++;
}else{
if(j!=0)
j = next[j-1];
else
i++;
}
}
if(j==plen) return i-j;
return -1;
}
};
KMP算法参考:https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html
更高级搜索算法:
BM算法 Sunday算法https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html
第3章:LeetCode--算法:strStr KMP算法的更多相关文章
- 数据结构之BF算法,kmp算法,三元组,十字链表总结
在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...
- 算法:KMP算法
算法:KMP排序 算法分析 KMP算法是一种快速的模式匹配算法.KMP是三位大师:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,所以取首字母组成KMP. 少部分图片来自孤~影 ...
- BF算法与KMP算法
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的 ...
- 算法 | 串匹配算法之KMP算法及其优化
主串 s:A B D A B C A B C 子串 t: A B C A B 问题:在主串 s 中是否存在一段 t 的子串呢? 形如上述问题,就是串匹配类问题.[串匹配--百度百科] 串匹配问题是一 ...
- KMP算法及KMP算法的应用(POJ2406)
///KMP算法#include<bits/stdc++.h> using namespace std; ]; void makeNext(const char P[],int next[ ...
- 什么是KMP算法?KMP算法推导
花了大概3天时间,了解,理解,推理KMP算法,这里做一次总结!希望能给看到的人带来帮助!! 1.什么是KMP算法? 在主串Str中查找模式串Pattern的方法中,有一种方式叫KMP算法 KMP算法是 ...
- 串、串的模式匹配算法(子串查找)BF算法、KMP算法
串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3…….an ' n ...
- 算法笔记--KMP算法 && EXKMP算法
1.KMP算法 这个博客写的不错:http://www.cnblogs.com/SYCstudio/p/7194315.html 模板: next数组的求解,那个循环本质就是如果相同前后缀不能加上该位 ...
- 数据结构4_java---顺序串,字符串匹配算法(BF算法,KMP算法)
1.顺序串 实现的操作有: 构造串 判断空串 返回串的长度 返回位序号为i的字符 将串的长度扩充为newCapacity 返回从begin到end-1的子串 在第i个字符之前插入字串str 删除子串 ...
随机推荐
- DBUtils的最基本的使用
背景 学习了如何连接数据库之后,发现里面进行查询的过程有点麻烦,因此使用DBUtils包来简化操作 配置环境 win10 jdk11 idea mysql8.0.13 jar包 连接数据库的包 c3p ...
- jquery validate 表单验证插件 代码
/* 表单验证 */ var signupFormValidator = $("#signupForm").validate({ /* 自定义验证规则 */ rules : { o ...
- mac 启动mysql
sudo /usr/local/mysql/support-files/mysql.server stop sudo /usr/local/mysql/support-files/mysql.serv ...
- Concurrent初探 --- Atomic 无锁
一.CAS算法 Compare And Swap,CAS算法的过程是这样:它包含3个参数CAS(V,E,N).V表示要更新的变量,E表示预期值,N表示新值.仅当V值等于E值时,才会将V的值设为N,如果 ...
- 从服务端下载文件到本地windows
之前常使用本地ubuntu和远程的centos服务器或者是本地mac和远程centos服务器通过命令scp或者nc来进行文件的传输. 现在用的是windows系统,欲将服务器的某文件load到本地. ...
- RK3288 查看ddr信息
转载请注明出处:https://www.cnblogs.com/lialong1st/p/10910949.html CPU:RK3288 系统:Android 5.1 1.查看ddr驱动版本号.容量 ...
- 服务挂后Dump日志
JAVA_HOME=/usr/java OUTPUT_HOME=~/output DEPLOY_HOME=`dirname $0` HOST_NAME=`hostname` DUMP_PIDS=`ps ...
- Tosca new project Repository as MS SQL Server
# 然后对应的服务器就能自己给创建对应的数据库
- LC 375. Guess Number Higher or Lower II
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...
- BitmapShader填充图形
package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.*; imp ...