字符串的自我毁灭(悲)
文章平均质量分 80
洛斯马里
只有相信CSC大人才能变强
展开
-
AC自动机粗学
前言——不明觉厉的算法排名第一位必要的前置知识KMP字典树什么是AC自动机AC自动机以字典树结构为基础,结合KMP的思想建立简单来讲,建立一个AC自动机有两个步骤:第一步: 建立字典树,将所有的模式串插入,构成一棵字典树第二步:依据KMP的思想,对字典树上的所有结点构造失配指针AC自动机解决什么问题?有多个模式串的匹配问题,即多模匹配问题字典树的构建点击这里快速回忆失配指针的构造AC自动机使用fail指针来帮助多模式串进行匹配树上结点u的fail指针指向另一个树上结点v,u和原创 2021-10-24 20:20:15 · 126 阅读 · 0 评论 -
Manacher(解决回文串问题的简单算法)
前置定义d1[]和d2[]对于一个字符串的每个位置 i=0,1,…,n-1,我们找出值d1[i]和d2[i]。二者分别表示以位置i为中心的长度为奇数和长度为偶数的回文串个数。求回文串朴素算法就是针对每一个位置i,朝两侧遍历并判断。// C++ Versionvector<int> d1(n), d2(n);for (int i = 0; i < n; i++) { d1[i] = 1; while (0 <= i - d1[i] && i + d原创 2021-10-03 14:41:38 · 202 阅读 · 0 评论 -
前缀函数与KMP
前缀函数定义:一个长度为n的字符串s,其前缀函数被定义为一个长度为n的数组Π,其中Π[i]的定义是:如果子串s[0…i]有一对相等的真前缀与真后缀,即存在s[0,k-1]=s[i-(k-1),i],那么Π[i]就是这个相等的真前缀的长度k,得到Π[i]=k如果不止一对相等,Π[i]=max(k)如果没有相等的,那么Π[i]=0用于优化的性质:相邻的前缀函数值至多增加1,增加条件为s[i+1]==s[Π[i]],所以当移动到下一个位置时,前缀函数的值要么增加1,要么维持不变,要么减少,循环可原创 2021-09-24 22:09:43 · 305 阅读 · 0 评论 -
字典树粗学
什么是字典树?字典树使用边来表示字母,从根节点到树上某一结点的路径表示了一个字符串。字典树的特点1.使用边来表示字母2.有相同字母的单词公用前缀节点,每个节点最多有N个子节点(N为该字符串包含的字符种类)3.根节点为空4.每个单词结束时,在该节点添加标记flag以表示这段路径是一个单词而非前缀...原创 2021-09-09 14:30:36 · 222 阅读 · 0 评论 -
CF898 F. Restoring the Expression
题目链接题目大意:给你长度为n的一个字符串,将其拆分成三部分a,b,c,使其三者相加恰好是一个正确的数学求和式a+b=c思路:首先,将整个字符串拆分成n个高精度数,之后运用字符串哈希的方法,将每一个高精度数转换成对应的哈希值,便于求和检查是否相等。在这之后,遍历c的所有可能长度,由于 a和b的长度必然不会大于c, 可知:前面两式,一个式子长度可能为lenc或lenc-1,另一个就是 n-2 * len2或n-2 * lenc+1 ,在这个结论的基础上,利用式子的哈希值判断它们相加是否满足题目条件,转载 2021-04-10 12:01:51 · 174 阅读 · 0 评论