——字符串——————
文章平均质量分 72
Lazines_by
好吧,我要工作了
展开
-
uva 548 (二叉树)(不知数的多少进行数的一整行输入)
https://vjudge.net/problem/19105/origin题意:给出一个中序遍历和一个后序遍历,构建树,然后求出从根节点到哪个叶子节点的值最小;思路: 题并不难,主要是不知道数的数目进行数的一整行输入;实现数的一整行输入:代码可以写成:int ReadLine(T* data_array) { string str_line; i原创 2017-03-05 15:53:25 · 287 阅读 · 0 评论 -
字典树入门
hdu 1251题意:将一系列字符串插入字典中之后,查询给定的字符串是多少字符串的前缀。思路:裸字典树PS:很坑,用指针写无限MLE,只能用数组写了,不知道要开多大,一直照着内存改。数组版本:#includeusing namespace std;const int maxn = 1e5 + 10;typedef long long ll;#define clr(x,y原创 2018-01-25 10:30:57 · 130 阅读 · 0 评论 -
AC自动机入门
入门看的是bilibili上的UESTC的教程,很赞!建树:字典树的建立方法 构造fail指针:当为根节点的子节点的时候,它的fail指针指向root。 其他的时候通过父亲节点进行对孩子节点的fail指针进行更新。 采用的是BFS 进行匹配查询: 没有失原创 2018-01-30 16:09:41 · 190 阅读 · 0 评论 -
hdu 4821(字符串hash)
题意:找出有多少个M * L长度的串,串的M个连续长度为L的子串都不相同。思路:直接hash,选取一个起始位置(1 ~ L),然后每L个L个hash一下,然后类似与尺取,取m个,看是否是m个字符的hash值都不同。#includeusing namespace std;const int maxn = 1e5 + 10;typedef long long ll;typedef原创 2017-10-16 21:54:33 · 221 阅读 · 0 评论 -
codeforces 825F (简单dp + KMP)
题意:给出一个字符串,你要把它尽量压缩成一个短的字符串,比如一个字符串ababab你可以转化成3ab,长度为 3,比如bbbacacb转化成3b2ac1b,长度为 7,aaaaaaaaaa转化为10a,长度为 3。思路:先n^2预处理出i,j之间的需要多少长度变成,然后简单状态转移一下。预处理的时候要运用到next数组的性质,即求一个字符串的最小循环的长度,如果len % (len原创 2017-10-01 18:00:49 · 805 阅读 · 0 评论 -
hdu6208
直接去个重,然后strstr判断子串就行#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair P;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,原创 2017-09-18 12:15:59 · 460 阅读 · 0 评论 -
hdu 4333(扩展KMP)
题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数。例如:134可以形成134,341,413三个数,所以分别是1,1,1。 分析:由于长度为len的字符串形成题目要求的串的个数为len,那么我们可以把原来的两个串T连接起来形成字符串S,然后找S的每个后缀的前len个元素即可。 这里主要是如何比较的问题,对于字符原创 2017-09-07 20:20:37 · 296 阅读 · 0 评论 -
hdu 6153(扩展KMP)
题意先翻过来,后缀先变前缀(不想描述后缀啦^_^)给出两个串,这里我们记作S串和T串对于T串的一个前缀t串,求出t串在S串中出现了多少次,这个小t串对答案的贡献就是”次数 * t的长度”求T串所有符合条件的前缀对答案的贡献和解决 对拓展KMP没经验 不管三七二十一,先翻转过来再说… 重点,我们求出在S串里,以下标i开始,有多长的原创 2017-09-07 17:39:19 · 239 阅读 · 0 评论 -
poj 3690(二维哈希)
感觉二维哈希的思想跟一维的差不多,比如要匹配的字符串是p *q的大小,先保存好以下标为i,j为一列的末尾元素的hash值,然后一q大小的列 进行 行的拓展,行列的思想都一样,滚动。//#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsig原创 2017-09-05 21:20:28 · 438 阅读 · 0 评论 -
poj3461 hash字符串匹配
可以用KMP写,然而发现hash不用写很长,而且好理解。定义一个匹配串的hash值为c[1]b^ (m - 1) + c[2]b^(m - 2) + …… + c[m - 1]b + c[m];然后直接比较在模式串上子串的hash值是不是等于匹配串,是的话就匹配了。b的选择一般是质数,为了溢出也是正数一般数都定义为usigned long long;//#include#原创 2017-09-05 17:48:06 · 375 阅读 · 0 评论 -
O(n)求回文串 manacher算法
O(n)回文子串(Manacher)算法资料来源网络 参见:http://www.felix021.com/blog/read.php?2040p[id * 2 - i]代表的是关于i关于id对称的点j,数组p[i] - 1代表插入字符后一i问对称的回文串的长度;问题描述:输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着转载 2017-05-05 21:41:06 · 444 阅读 · 0 评论 -
poj3461 KMP
便是还是不能理解KMP的代码的运行机理,先套模板吧>_#include#include#include#include#include#includeusing namespace std;#define clr(x,y) memset(x,y,sizeof x)typedef long long ll;const int maxn = 1000000 + 2;co原创 2017-05-12 15:05:07 · 205 阅读 · 0 评论 -
KMP Next数组的应用入门
poj - 2751 题意:找出一个字符串中既是前缀又是后缀的字符串的长度,增序输出。思路:我们学习了KMP,KMP中next的数组的意思为:借用了一下kuangbin大佬的:假设主串:S: S[1] S[2] S[3] ……S[n]模式串:T: T[1] T[2] T[3]…..T[m]现在我们假设主串第i 个字符与模式串的第j(j<=m)个字符‘失配’后,主串第i 个字原创 2018-01-25 15:46:26 · 306 阅读 · 0 评论