字符串算法
Ariawater
这个作者很懒,什么都没留下…
展开
-
POJ 2774 HDU 4821 -- Hash算法
Hash的用处就是将一个字符串从头到尾的特殊化记录一下,每次要判断字符串是否相等,直接看Hash值是否相等就好了 这里用的均为BKDR-HashPOJ 2774 题目链接:http://poj.org/problem?id=2774 题目大意:给你两个字符串,求它们的最长公共子串的长度 思路:对两个字符串都Hash扫一下, 通过二分来判定公共子串长度,先求s1中长度为t的子串的Hash...原创 2018-07-23 11:28:34 · 131 阅读 · 0 评论 -
POJ 3693 连续重复子串
题目链接:http://poj.org/problem?id=3693题意:给你一个字符串,让你求重复次数最多的连续重复子串思路:先穷举长度L,然后求长度为L的子串最多能连续出现几次。首先,肯定能连续出现1次,所以我们直接考虑出现2次及以上的情况。假设在原字符串中连续出现了两次,记这个子字符串为S,那么S肯定包括了字符r[0], r[L], r[2*L], r[3*L], ..... 中相...原创 2018-08-16 19:02:07 · 755 阅读 · 0 评论 -
POJ -- 3261 后缀数组求可重叠K次重复子串
题目链接:http://poj.org/problem?id=3261题目大意:给你一组数,和一个数k,代表了要重复次数,问你最长的重复出现了K次子串的长度是多少 (子串可重叠)思路: 先二分答案,然后将后缀分成若干组。不同的是,这里要判断的是有没有一个组的后缀个数不小于k。如果有,那么存在k 个相同的子串满足条件,否则不存在。这个做法的时间复杂度为O(nlogn)。AC代码:#...原创 2018-08-15 14:41:26 · 223 阅读 · 0 评论 -
HDU 2243 -- AC自动机+矩阵加速 (附赠POJ 2778)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243题意:中文题目,与POJ 2278比较相似,不多说了大体思路:首先是对2^64取模这个问题,利用Hash算法中的思想,直接定义成unsigned long long,就可以了,在AC自动机的状态转移过程中,使用矩阵快速幂来进行优化加速,又因为是要求和,所以在构造的L*L矩阵中,额外增加一维...原创 2018-08-07 20:31:44 · 170 阅读 · 0 评论 -
Aho-Corasick懵逼学习
强烈推荐这个网址:http://blog.ivank.net/aho-corasick-algorithm-in-as3.html ,提供了该算法的自主动态演示书籍推荐:《柔性字符串匹配》AC自动机是著名的贝尔实验室1975年搞出来的东西,我很想知道这么多年过去了有没有新的多模匹配算法搞出来,查了一下百度,还真有不少,这篇文章中介绍了一些 https://wenku.baidu.com/...原创 2018-08-02 20:57:58 · 875 阅读 · 1 评论 -
Trie树习题--三连
一连:POJ 1056 http://poj.org/problem?id=1056题意:问是否有一个串S,S是另一个字符串的前缀思路:直接Trie建立,再从头遍历一遍,要注意的是,自己是自己的前缀,统计前缀个数时要注意一下#include<cstdio>#include<iostream>#include<cstring>using ...原创 2018-08-02 11:46:22 · 320 阅读 · 0 评论 -
HDU 1277 -- AC自动机的使用(模板补全)
kuangbin巨的专题实在搞不懂了,里面一大堆dp,实在不会写,正好找到了这道题,模板也是终于加上了注释题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1277题意:就是给你一大~大串数字,再给你几串数字,按照在主串中出现的先后顺序输出序号思路:直接AC自动机查询不解释,有一个问题是我们要做到按出现的先后顺序输出,这道题与HDU 2896...原创 2018-08-10 16:31:58 · 113 阅读 · 0 评论 -
ZOJ 3228 -- AC自动机的使用
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3228题目大意:给你一个字符串,再给你一些子串,问你子串在主串中的出现的情况,一种是可叠加出现,一种是不可叠加出现思路:对于第一种情况,就是直接来个AC自动机就解决的事,对于第二种情况,我们加一个判断是否重叠就好了,当前字符位置 — last[当前节点] ...原创 2018-08-09 20:28:14 · 216 阅读 · 0 评论 -
HDU 2222 -- AC自动机
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题目大意:给你一些子串,问有多少个出现在了主串里 思路:多串匹配问题,直接用AC自动机来做AC代码:#include&amp;lt;iostream&amp;gt;#include&amp;lt;cstdio&amp;gt;#include&amp;lt;cstring&amp;gt;#i原创 2018-07-27 20:12:25 · 181 阅读 · 0 评论 -
HDU 2457 -- AC自动机+dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2457题目大意:给你一些Bug字符组,再给你一个长字符串,问要使长字符串中不出现这些BUG字符组,需要至少改动几个字符思路:这道题AC自动机部分我会,直接模板敲上去记录一下端点就完事了,然后dp部分我又实在是不会,好烦~~这里说一些其他大佬的dp思路:用DP[i][j]表示长度为i (i &...原创 2018-08-09 09:43:25 · 106 阅读 · 0 评论 -
Trie字典树学习
Trie树的作用是存储多个字符串, 并按照字典序排好。算法时间复杂度为O(n), 空间复杂度为O(nk), n为所有字符串的长度和, k为可能出现的字符个数。 Trie树的实现就是按照单词的字母顺序从上到下依次连接(注意根节点为空)字典树最常见的操作是插入和查询,其中插入是对字典树的构建,基本思路是从头遍历字符串,若发现在Trie树中已经有了相应结点,则向下走,否则新建结点查询一般...原创 2018-07-30 20:57:40 · 124 阅读 · 0 评论 -
HDU 2896 -- AC自动机
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896题意:这是中文题目,也没有什么会产生多重语义的地方,不说了思路:既然题目都要求匹配个数了,就直接上AC自动机吧,此题在于要保存一下字符串的顺序,在建立Trie树时,在最后一个节点上加上个id就可以了,询问时再输出出来AC代码:#include<cstdio>#inc...原创 2018-08-03 16:34:58 · 100 阅读 · 0 评论 -
HDU 1247 -- 字典树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247 题目大意:给你一堆单词,找出其中的hat’s words. hat’s words定义为存在两个单词,恰好可以拼接成这个单词 思路:先构建一棵字典树,来存储每一个单词,然后构建一棵反串字典树。检查每一个单词,在两棵字典树中是否有两个单词可以拼成它 AC代码:#include<...原创 2018-07-26 10:55:07 · 110 阅读 · 0 评论 -
KMP-hdu 1358
幸运的一次AC,再来回顾这一道题原题链接 http://acm.hdu.edu.cn/showproblem.php?pid=1358题目大意是找前缀,且这个前缀由重复的子串组成,题本身不难(好吧,是水题),考察了对next数组的理解;说简单一点,对于i 的 next[i] 即若 i 处不匹配时,我们不需要从头开始重新匹配, 再从next[i]开始匹配就好了,因为前面的重复了且 i...原创 2018-01-20 15:24:59 · 195 阅读 · 0 评论 -
HDU 3613: 扩展KMP or Manacher判回文
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目大意:让你去切一个项链成两部分,若为某部分为回文串,则将该部分的权值加起来,求最大值 思路:推荐一篇博客: https://blog.csdn.net/u013480600/article/details/23041391 开始做这道题是,想到的是用manacher算法,不过mana...原创 2018-07-25 14:52:02 · 141 阅读 · 0 评论 -
HDU 2609 -- 最小表示法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 题目大意:给你一些串,问有多少个串是循环同构之后仍不同的 思路:典型的最小表示法题,对每一个串求一个最小循环表示,然后用set去重就好了 AC代码:#include<bits/stdc++.h>using namespace std;char str[105], st...原创 2018-07-24 20:29:09 · 189 阅读 · 0 评论 -
HDU 4300 -- 扩展KMP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4300 题目大意:第一个字符串A是密码表,为a~z所对应的新字母,第二个字符串B是密码+(部分)原文构成的字符串,现在让你补全这个字符串,使得这个字符串前半部分是密码,后半部分是原文 思路: 先利用密码表A,将串B全部看成是密码,然后转换成一个新串C,所以,原文就出现在了串B的后缀,和串C的前缀这两...原创 2018-07-24 16:05:11 · 131 阅读 · 0 评论 -
SPOJ SUBST1 不相同子串个数
题目链接:https://www.spoj.com/problems/SUBST1/en/题意:给你一个字符串,求不相同的子串的个数思路:因为每个子串都一定是某个后缀的前缀,那么问题就可以转换成求所有后缀间不相同的子串的个数,而我们的height数组记录的是两个相邻后缀数组的最长公共前缀,所以我们用总数n*(n+1)/2 - height[i]的和就是答案AC代码:#includ...原创 2018-08-16 19:10:29 · 203 阅读 · 1 评论