一. 简单的直接算法 比较次数:(n-m-1)*m次 时间复杂度O(mn) 二. Rabin-karp算法 算法思想:将字符串转化成数字进行粗比较,筛选后进行细比较 算法设计: (1)直接数值比较 算法思想:字符集与 1-n 的数值满足双射,字符串转化为n进制数值 优化程度:a. 比较次数:n-m次 ...
分类:
编程语言 时间:
2020-06-25 18:00:36
阅读次数:
68
单链表 两种形式 结构体形式 : 申请新节点太慢 struct List { int data; List *next; } 数组模拟 代码模板 const int N = 1e6 + 10; int e[N], ne[N], head, idx; // 初始化:head存的是头结点下标,用idx分 ...
分类:
其他好文 时间:
2020-06-25 15:24:32
阅读次数:
68
题目链接:http://poj.org/problem?id=1961 通过next数组求字符串截止到i位置的最小循环节以及循环次数,可以在O(N)时间内得出,通过这个方法可以求得字符串的任意长度的循环节。 代码如下: #include<iostream> #include<cstdio> usin ...
分类:
编程语言 时间:
2020-06-17 18:07:49
阅读次数:
51
KMP ? KMP算法每当一趟匹配过程中出现字符比较不等时,主串S中的i指针不需回溯,而是利用已经得到的“部分匹配”结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。 ? KMP算法的主要核心其实就是next数组的求解 next数组求解 void GetNext(char *w, int n ...
分类:
其他好文 时间:
2020-06-06 21:46:50
阅读次数:
76
public class Kmp { String snippet; String searchText; int[] next; public Kmp(String inputString) { this.snippet = inputString; // next = new int[this. ...
分类:
编程语言 时间:
2020-05-01 12:39:47
阅读次数:
73
KMP算法 1. 算法介绍 KMP是一个解决模式串在文本串是否出现过,若出现过,最早出现的位置的算法 Knuth Morris Pratt 字符串查找算法,简称“KMP算法”,此算法由 Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977年联合发表, ...
分类:
编程语言 时间:
2020-05-01 01:21:12
阅读次数:
58
算法 第七章 KMP/Manacher/BFPRT算法(完结) KMP算法及其复杂度估计 + KMP算法解决的问题:在str1字符串(长度n)中是否包含str2(长度m),返回 1或者首位置 + 暴力解O(nm),KMP算法时间复杂度O(n) + next数组与最长前缀/后缀匹配长度 + KMP算法 ...
分类:
编程语言 时间:
2020-04-21 18:01:54
阅读次数:
85
题意:给出一个字符串,问字符串中存在多少子串,使得这些子串既是字符串的前缀,又是字符串的后缀,要求从小到大依次输出这些子串的长度。 思路:根据 next 数组的定义,可以得到前缀 next[len] 长度的子串与后缀 next[len] 长度的子串相同,因此求出 len 处的 next 值,然后向下 ...
分类:
其他好文 时间:
2020-04-21 09:34:26
阅读次数:
51
AC自动机 ~~Accepted~~ Aho Corasick 性质 AC自动机/AC算法 (Aho Corasick automaton),是著名的多模式串匹配算法。 前置知识 1. 字典树( 重要 ) 2. KMP算法(了解Next数组的作用) 典例与算法复杂度分析 典型例题是:给定一个主串 S ...
分类:
编程语言 时间:
2020-03-27 09:11:10
阅读次数:
73
CF1137B Camp Schedule 题意:s和t均由0和1构成。要求重组s串,使得t在s中出现的次数最多。 思路: 统计s中0和1的个数,基于t串构造新的s串。 设j是t的指针,从t串的首位开始依次向后: 如果t[j]对应的数字仍有剩余,输出t[j],否则退出循环,输出剩下的数字。 如果j已 ...
分类:
其他好文 时间:
2020-03-13 20:30:23
阅读次数:
60