字符串算法模板合集

1、KMP

KMP模板

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long
#define INF 2147483647
#define mem(i,j) memset(i,j,sizeof(i))
#define F(i,j,n) for(register int i=j;i<=n;i++)
using namespace std;
char s1[1000010],s2[1000010];
int Next[1000010],l1,l2;
inline int read(){
    int datta=0;char chchc=getchar();bool okoko=0;
    while(chchc<'0'||chchc>'9'){if(chchc=='-')okoko=1;chchc=getchar();}
    while(chchc>='0'&&chchc<='9'){datta=datta*10+chchc-'0';chchc=getchar();}
    if(okoko==1)return -datta;return datta;
}
inline void get_Next(){
    int j=0;
    F(i,1,l2){
        while(j&&s2[j+1]!=s2[i+1])
            j=Next[j];
        if(s2[j+1]==s2[i+1])
            j++;
        Next[i+1]=j;
    }
}
inline void kmp(){
    int j=0;
    F(i,1,l1){
        while(j&&s2[j+1]!=s1[i])
            j=Next[j];
        if(s2[j+1]==s1[i])
            j++;
        if(j==l2){
            printf("%d\n",i-j+1);
            j=Next[j];
        }
    }
}
int main(){
    scanf("%s%s",s1+1,s2+1);
    l1=strlen(s1+1);l2=strlen(s2+1);
    get_Next();
    kmp();
    F(i,1,l2-1)
        printf("%d ",Next[i]);
    printf("%d\n",Next[l2]);
    return 0;
}

原文地址:https://www.cnblogs.com/hzf29721/p/10223108.html

时间: 2024-10-08 15:56:37

字符串算法模板合集的相关文章

最短路算法模板合集(Dijkstar,Dijkstar(优先队列优化), 多源最短路Floyd)

再开始前我们先普及一下简单的图论知识 图的保存: 1.邻接矩阵. G[maxn][maxn]; 2.邻接表 邻接表我们有两种方式 (1)vector< Node > G[maxn]; 这个是之前就定义了图的大小了,再下面使用的时候就不用对图的大小进行申请了, 但是因为是直接申请了大小 要对图进行初始化,因此可能在某些题目中这样使用的话会超时 (2)vector< vector<Node> > G; 这个是未定义大小,但是在使用之前要对其的大小内存进行申请. G.resi

【模板】各类我会的傻逼算法模板合集(建设中

如果模板有误请杀了我 好了结束了可以关掉了 最大流dinic const int M=100005,N=2*1234; struct edge{ int to,next,cap; }e[M]; int cnt=1,last[N],h[N]; void insert(int a,int b,int c){ e[++cnt]=(edge){b,last[a],c};last[a]=cnt; e[++cnt]=(edge){a,last[b],c};last[b]=cnt; } bool bfs(in

学渣乱搞系列之Tarjan模板合集

学渣乱搞系列之Tarjan模板合集 by 狂徒归来 一.求强连通子图 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #incl

算法分类合集(转)

ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列双端队列可并堆左偏堆 二叉查找树Treap伸展树 并查集集合计数问题二分图的识别 平衡二叉树 二叉排序树 线段树一维线段树二维线段树 树状数组一维树状数组N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树.动态建树) AC自动机 LCA和RMQ问题 KMP算法 图论 基本图算法图广度优先遍历深度优先遍历拓扑排序割边割点强连通分量Tarjan算法双连通分量强连通分支及其缩点图的割边和

【开坑】常见算法时间复杂度合集

*摘自交大ACM-ICPC系列丛书和网络 [数据结构] 二叉堆 并查集——初始化O(n),查找均摊O(1),合并均摊O(1) 树状数组——求和.修改O(logn) 左偏树——插入O(logn),求极值O(1),删除O(logn),合并O(logn) Trie——插入.查询O(length) Treap——插入.删除.查询O(logn) 伸展树 RMQ线段树 ST表 LCT 块状链表 树链剖分——剖分O(nlogn) [图论] [数学] [计算几何] [字符串]

算法分类合集

ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列双端队列可并堆左偏堆 二叉查找树Treap伸展树 并查集集合计数问题二分图的识别 平衡二叉树 二叉排序树 线段树一维线段树二维线段树 树状数组一维树状数组N维树状数组 字典树 后缀数组,后缀树 块状链表 哈夫曼树 桶,跳跃表 Trie树(静态建树.动态建树) AC自动机 LCA和RMQ问题 KMP算法 图论 基本图算法图广度优先遍历深度优先遍历拓扑排序割边割点强连通分量Tarjan算法双连通分量强连通分支及其缩点图的割边和

PHP中自带的字符串操作函数合集

1.查找字符位置函数: strpos($str,search,[int])://查找search在$str中的第一次位置从int开始: strrpos($str,search,[int])://查找search在$str中的最后一次出现的位置从int开始 2.提取子字符函数(双字节) submit($str,int start[,int length])://从$str中strat位置开始提取[length长度的字符串]. strstr($str1,$str2)://从$str1(第一个的位置)

字符串算法模板

1.KMP算法 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> #include<iostream> using namespace std; int next[100]; char p[1000]; int makenext(char p[],int next[]) { int n=strlen(p);

模板合集

[快速幂运算] long long quickpow(long long x,long long n,long long k) { long long ans=1; while(n>0) { if(n&1) ans=(ans*x)%k; n>>=1; x=(x*x)%k; } return ans; } [矩阵快速幂] [树状数组] #define lowbit(x) x&(-x) void give(int x,int k) { for(int i=x;i<=n;