E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
——后缀数组
【
后缀数组
】
后缀数组
是解决一系列字符串题目的利器,
后缀数组
中保留了这样的信息。sa[i]表示排名为第 i 位的后缀是从sa[i]开始的。通过倍增算法可以在O(nlogn)的时间复杂度内将所有的后缀进行排序。
·
2015-11-11 01:04
后缀数组
bestcoder#32 1002 哈希+
后缀数组
bestcoder#32 1002 哈希+
后缀数组
Negative and Positive (NP) Time Limit: 3000/1500 MS (Java/Others)  
·
2015-11-11 00:25
code
后缀数组
专题与代码模板
后缀数组
DA(倍增)算法求 SA[N] 与 Rank[N] (时间O(NlogN),空间O(N)) sa[i] : 表示 排在第i位的后缀 起始下标 rank[i]
·
2015-11-11 00:56
后缀数组
后缀数组
学习笔记
后缀数组
的用处:快速求出两个后缀Suffix(i), Suffix(j)的最长公共前缀(LCP, Longest Common Perfix)
后缀数组
的应用 先提出
后缀数组
的几种常用技巧:
·
2015-11-10 23:27
学习笔记
POJ 3261 可重叠的 k 次最长重复子串【
后缀数组
】
这也是一道例题 给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠。算法分析:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组。不同的是,这里要判断的是有没有一个组的后缀个数不小于 k。如果有,那么存在k 个相同的子串满足条件,否则不存在。这个做法的时间复杂度为 O(nlogn)。 我们可以通过二分子串的长度k来做,这时就将题目变成了是否存在
·
2015-11-10 23:27
后缀数组
Ural 1297 Palindrome 【最长回文子串】
article/details/6629268 http://blog.csdn.net/kangroger/article/details/37742639 在看
后缀数组
的时候碰到的这道题目
·
2015-11-10 23:25
ROM
URAL 1297 Palindrome
后缀数组
D - Palindrome Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice URAL 1297 Description T
·
2015-11-10 23:29
后缀数组
poj3261
后缀数组
+单调队列 注意:
后缀数组
的所有后缀中包括空串,因此有strlen(s)+1个后缀。
·
2015-11-10 22:49
poj
poj1743
分析:
后缀数组
,一定要注意,吉大的模板的nlogn算法,要初始化n=strlen(s) +1,另外,s,sa,rank一定要从0位置开始使用。height从1位置开始有意义。
·
2015-11-10 22:26
poj
POJ 3974 Palindrome 回文数 Manacher算法
该题貌似可以用
后缀数组
和扩展kmp做,但是好像
后缀数组
貌似会tle,改学了下一个专门的叫Manacher算法的东西。。。 该算法说起来也不是太复杂,比较容
·
2015-11-10 22:06
poj
HDU3518
后缀数组
求不可重叠重复出现的不同子串个数
枚举子串长度,根据height分组,如果本组sa最小值与sa最大值之差超过枚举的长度,则本组对于答案贡献为1。1#include 2#include 3#include 4#include 5#include 6#include 7#include 8#include 9#include 10#include 11#include 12#include 13#include
夢中花落
·
2015-11-09 21:00
hdu 4691 Front compression(
后缀数组
)
题目链接:hdu4691Frontcompression代码#include #include #include usingnamespacestd; constintmaxn=1e5+5; typedeflonglongll; structSuffix_Arr{ intn,s[maxn]; intSA[maxn],rank[maxn],height[maxn]; inttmp_one[ma
u011328934
·
2015-11-09 20:00
[poj 3261]Milk Patterns
后缀数组
搞一下就可以了喵~ 其实这道题的第一个想法是 SAM ,建完后缀自动机后拓扑排序跑一遍统计下每个子串的出现次数就 O(N) 就妥妥过掉了 后缀树也是 O(N) 的,统计一下每个节点对应的子树中有多少个叶子节点即可
·
2015-11-09 13:29
Pattern
[hdu 4622]Reincarnation
这道题是妥妥的后缀自动机裸题 学了后缀自动机后,我居然感觉这尼玛果然还是
后缀数组
最难了有木有!
·
2015-11-09 13:27
HDU
初学
后缀数组
后缀排序 Description Tim正在自学《数据结构》,他刚刚学会如何比较两个字符串大小。书上是这么说的(和Pascal语言中的比较规则相同,学习过Pascal语言的同学可以跳过这段): 比较两个不同字符串s1=’p1p2p3…pN’和s2=’q1q2q3…qM’的大小,设N<=M。 若s1是s2的前缀,则s1<s2。否则设pi<>qi,且i最
·
2015-11-09 12:18
后缀数组
spoj 7258 Lexicographical Substring Search(
后缀数组
| 后缀自动机)
题目链接:spoj7258LexicographicalSubstringSearch代码-
后缀数组
#include #include #include #include #include usingnamespacestd
u011328934
·
2015-11-09 11:00
总结与计划
还剩下的就是
后缀数组
了。继续搞字符
·
2015-11-08 16:56
总结
POJ3729 Facer’s string
后缀数组
&nbs
·
2015-11-08 14:43
String
POJ3581---Sequence 后缀树组
后缀数组
变一下,,先求出 第一个分割的位置,,然后再求一次
后缀数组
,,求出第二个位置。。输出就好了。 此题要采用单组输入。。。
·
2015-11-08 14:42
sequence
HDU 5008 Boring String Problem(
后缀数组
+二分)
题目链接 思路 想到了,但是木写对啊....代码 各种bug,写的乱死了.... 输出最靠前的,比较折腾... #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> #includ
·
2015-11-08 14:51
String
后缀数组
具体请看论文.... POJ 1743 Musical Theme 不重叠的最长重复子串 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; #define N 20100
·
2015-11-08 14:50
后缀数组
开始ACM生涯了
本来想在Trie后面给大家讲讲
后缀数组
的,不过自己还不是很
·
2015-11-08 12:20
ACM
【挑战程序设计竞赛】
后缀数组
实现字符串匹配
字符串后缀Suffix 指的是从字符串的某个位置开始到其末尾的字符串字串
后缀数组
Suffix Array 指的是将某个字符串的所有后缀按字典序排序之后得到的数组,不过数组中不直接保存所有 的后缀子串
·
2015-11-08 12:01
程序设计
LightOJ 1314 Names for Babies(
后缀数组
)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1314 题意:求串A长度在[p,q]区间上的子串个数。 思路:求sa和height数组。每个位置sa[i]最多产生n-sa[i]个子串,min(q,n-sa[i])为实际产生的子串,其中有height[i]个重的,减去。 int r[N],s
·
2015-11-08 11:03
后缀数组
LightOJ 1428 Melody Comparison(
后缀数组
)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1428 题意:若一个串t是A的子串且t不包含B,称t为A的合法子串。求A不同的合法子串的个数。 思路:首先求出B在A中出现的位置,t[i]表示从A串的i位置向后最早匹配完B的位置为t[i],注意是匹配完B。这样求出sa和height数组后,枚举i从1到n,设x=t[sa[i]
·
2015-11-08 11:03
后缀数组
POJ 3415 Common Substrings(
后缀数组
)
题目链接:http://poj.org/problem?id=3415 题意:给定两个字符串A和B以及整数K,求长度不小于K的公共字串的个数。 思路:拼接在一起,求sa和height数组。然后就是统计。每遇到一个B的后缀就统计与A的后缀能产生多少长度不小于K的公共子串,每遇到一个A的后缀就统计与B的后缀能产生多少长度不小于K的公共子串。 设A串为aabbaaa,B串为aaa,中间用美元符
·
2015-11-08 11:14
substring
POJ 3294 Life Forms(
后缀数组
)
题目链接:http://poj.org/problem?id=3294 题意:给定n个字符串,求出一个尽可能长的子串,使得该子串至少出现在n/2+1个给定的串中。 思路:将n个字符串连起来,二分答案,将后缀分成若干组,判断每组的后缀是否出现在不小于n/2+1个原串中。 int r[N],sa[N],wa[N],wb[N],wd[N],rank[N],h[N]; int
·
2015-11-08 11:14
form
SPOJ 220 Relevant Phrases of Annihilation(
后缀数组
)
题目链接:http://www.spoj.pl/problems/PHRASES/ 题意:给定n个字符串,求在每个字符串中至少出现两次且不重叠的最长字串。 思路:先将n个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求sa和height数组。然后二分答案,将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中,后缀的起始位置的最大值与
·
2015-11-08 11:13
后缀数组
HDU 4416 Good Article Good sentence(
后缀数组
)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4416 题意:给出一个串A和多个串B。求A有多少不重复的子串使得这些子串不是B中任意一个串的子串? 思路:将A和B拼在一起,求得这个串有多少个不同的子串X,将所有的B拼接在一起,求得有多少个不同的子串Y,答案为X-Y。在求不同的子串时,设串的长度为len,首先每个后缀将会贡献出len-sa[i]+1
·
2015-11-08 11:12
后缀数组
【hdu3065】病毒侵袭持续中
昨天晚上听说
后缀数组
好像可以完美替代AC自动机(事实上是不行的) 于是就拿出
·
2015-11-08 11:00
HDU
LA 4513 Stammering Aliens
一种是用哈希lcp法,另一种用
后缀数组
求解。
zhoujl25
·
2015-11-08 01:00
后缀数组-哈希lcp算
poj 1743 Musical Theme(
后缀数组
)
题意:有N(1 #include #include #include usingnamespacestd; constintMAXN=20010; intsa[MAXN];//SA数组,表示将S的n个后缀从小到大排序后把排好序的 //的后缀的开头位置顺次放入SA中 intt1[MAXN],t2[MAXN],c[MAXN];//求SA数组需要的中间变量,不需要赋值 intrank[MAXN],he
u014552756
·
2015-11-07 15:00
hdu 3553 Just a String (
后缀数组
)
hdu 3553 Just a String (
后缀数组
) 题意:很简单,问一个字符串的第k大的子串是谁。 解题思路:
后缀数组
。先预处理一遍,把能算的都算出来。
·
2015-11-07 12:54
String
后缀数组
后缀数组
:
后缀数组
SA是一个一维数组,它保存1..n的某个排列 SA[1 ] ,SA[2] ,…… ,SA[n] ,并且保证 Suffix(SA[i]) < Suffi
·
2015-11-07 12:38
后缀数组
POJ1743---Musical Theme (
后缀数组
+二分)
题意 :求最长不相交重复子串的长度。。 可以先求出LCP,,对于长度 二分出答案。。(竟然不会写二分) 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <ctime> 5 #include <queue> 6 #incl
·
2015-11-07 12:51
theme
poj 3415 Common Substrings(
后缀数组
| 后缀自动机)
题目链接:poj3415CommonSubstrings代码-
后缀数组
#include #include #include #include #include usingnamespacestd; typedeflonglongll
u011328934
·
2015-11-06 21:00
扩展KMP
方法1:暴力算法,时间复杂度O(n^2); 方法2:
后缀数组
,利用height的性质可以求出该问题,时间复杂度为O(n),但是预处理为O(nlogn) 方法3:扩展KMP,充分利用已经匹配过的性质,
·
2015-11-03 20:13
KMP
后缀数组
的应用
height[i] 表示排名第i的后缀和排名第i-1的后缀的最长公共前缀,也即sa[i]与sa[i-1]的最长公共前缀。 1、给定一个字符串,询问任意两个后缀的最长公共前缀,假设询问suffix(i)和suffix(j)的最长公共前缀,且rank[i] < rank[j],那么suffix(i)和suffix(j)的最长公共前缀的 长度为height[rank[i]+1],height[
·
2015-11-03 20:12
后缀数组
POJ 1226 Substrings (
后缀数组
)
题目地址:POJ1226将每一个字符串反转连接一次,再把所有字符串都连接起来,然后二分,找最大长度。注意与反转字符串之间不能直接相连。代码如下:#include #include #include #include #include #include #include #include #include #include #include usingnamespacestd; #defineLLl
u013013910
·
2015-11-03 12:00
编程
ACM
后缀数组
算法与数据结构
POJ 3294 Life Forms (
后缀数组
)
题目地址:POJ3294把所有字符串连在一块,并用一个从未出现的字符隔开,注意这个每两个之间的用来隔开的字符也不能重复,除非对1个的时候进行特判。然后二分长度,然后判断这个长度下能否有出现次数超过n/2次的,可以对其分组然后hash判断。找出最大长度之后,再用同样的方法从头找一遍,然后把符合要求的输出、代码如下:#include #include #include #include #includ
u013013910
·
2015-11-02 23:00
编程
ACM
poj
后缀数组
算法与数据结构
POJ 1743 Musical Theme (
后缀数组
)
题目地址:POJ1743二分长度,由于相似的都挨在一块,所以需要判断大于等于mid的区间的位置最左端与最右端是否大于mid.代码如下:#include #include #include #include #include #include #include #include #include #include #include usingnamespacestd; #defineLLlonglo
u013013910
·
2015-11-02 21:00
编程
ACM
后缀数组
算法与数据结构
SPOJ 705 New Distinct Substrings (
后缀数组
)
后缀数组
模板题。由于height数组是指与排名上一个的公共前缀,所以重复的个数是height[i]个,考虑当前这个字母所构成的子串的贡献即为n-sa[i]-height[i],然后累加即可。
u013013910
·
2015-11-02 19:00
编程
ACM
后缀数组
算法与数据结构
HDU 5030 Rabbit's String
思路:首先用
后缀数组
求出所有子串。二分答案串,判定是否存在一种分法满足要求。对于答案串A,设A起始位置所
·
2015-11-02 19:44
String
[TJOI2013]单词
可以用
后缀数组
来做。 我说以下ac自动机的做法: 加入每个单词,对路径上的所有点累计访问次数。 构建fail指针。 把每个节点的访问次数累加到它的fail上。具体有代码。。
·
2015-11-02 19:49
单词
Ural 1297 Palindrome (
后缀数组
)
题目地址:Ural1297
后缀数组
模板题。把字符串倒过来接到字符串后面,并在中间加一个从未出现的字符。然后用
后缀数组
就可以了。
u013013910
·
2015-11-02 19:00
编程
ACM
后缀数组
算法与数据结构
POJ2774 Long Long Message——
后缀数组
——pku2774
也是
后缀数组
的模板题吧。 代码: Program poj2774;//By_Thispoet Const maxn=200005; Var i,j,k,m,n,p,q,sum,
·
2015-11-02 17:38
message
后缀数组
Pascal代码实现
后缀数组
,真是个麻烦的东西。 题目大意如下:给定一个长度在5000以内的字符串,求出出现过两次或两次以上的最长字串(保证唯一解)。
·
2015-11-02 17:24
pascal
SPOJ 694 && SPOJ 705 (不重复子串个数:
后缀数组
)
题意 给定一个字符串,求它的所有不重复子串的个数 思路 一个字符串的子串都必然是它的某个后缀的前缀。对于每一个sa[i]后缀,它的起始位置sa[i],那么它最多能得到该后缀长度个子串(n-sa[i]个),而其中有height[i]个是与前一个后缀相同的,所以它能产生的实际后缀个数便是n-sa[i]-height[i]。遍历一次所有的后缀,将它产生的后缀数加起来便是答案。 代码 [cp
·
2015-11-02 17:12
后缀数组
SPOJ 694 && SPOJ 705 (不重复子串个数:
后缀数组
)
题意 给定一个字符串,求它的所有不重复子串的个数 思路 一个字符串的子串都必然是它的某个后缀的前缀。对于每一个sa[i]后缀,它的起始位置sa[i],那么它最多能得到该后缀长度个子串(n-sa[i]个),而其中有height[i]个是与前一个后缀相同的,所以它能产生的实际后缀个数便是n-sa[i]-height[i]。遍历一次所有的后缀,将它产生的后缀数加起来便是答案。 代码 [cp
·
2015-11-02 17:51
后缀数组
[hdu3336]kmp(
后缀数组
)
题意:求字符串s的所有前缀出现次数之和。 http://www.cnblogs.com/jklongint/p/4446117.html 思路:用kmp做,简单且效率高。以前缀结尾的位置分类,令dp[i]为以结尾位置在i的前缀数量,那么dp[i] = cnt(j)(j~i是前缀),而由kmp的next函数的转移性质,可得如下递推方程:dp[i] = dp[next[i]] + 1,把这个递推式
·
2015-11-02 16:39
后缀数组
上一页
18
19
20
21
22
23
24
25
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他