字符串操作
文章平均质量分 76
DASEason
https://github.com/qq547276542
展开
-
字典树模板
const int maxnode=100003; const int sigma_size=26; //字符集大小,注意idx函数也要随着修改 struct Trie{ int ch[maxnode][sigma_size]; int val[maxnode]; int sz; void init() { sz=1;memset(ch[0],0,sizeof(c原创 2015-08-19 16:48:54 · 2088 阅读 · 0 评论 -
KMP及相关算法
int next[1000070]; //next 数组 int ans; void getNext(char *p,int *next) //构造next数组 { int j=0,k=-1; next[0]=-1; int len=strlen(p); while(j<len) { if(k==-1||p[j]==p[k])原创 2015-08-20 10:00:09 · 1794 阅读 · 0 评论 -
字符串的最小/最大表示法
//返回字符串最小,最大表示的首下标 (同构字符串中字典序最小/最大的字符串起始下标)int MinimumRepresentation(char *str) { //最小表示法 int i,j,l,m=strlen(str); i=0; j=1; while(i str[(j+l)%m]) i=i+l+1; else j=j+l+1; if(i==j) j=i+1; } if(i<j) retu原创 2015-10-04 12:32:08 · 2462 阅读 · 0 评论 -
后缀数组,任意两点间LCP
#include #include #include #include #include #include #include #include #include using namespace std; const int MAXN=220010; /* da(str ,sa,rank,height,n ,128);//n是字符串长度; *例如: *n = 8,实际元素有9个,最原创 2015-10-10 10:34:39 · 2289 阅读 · 0 评论 -
AC自动机
#include #include #include #include #include using namespace std; const int maxnode=1000007; const int SIGMA_SIZE=26; //若字符串可能出现所有字符,则要将该值改为128,并且将idx函数中“ -‘a’ "去掉 //给定多个模板,一个文本,能够找出模板在文本中的位置与附加信息va原创 2015-08-20 09:48:37 · 1840 阅读 · 0 评论 -
UVA 10829 L-Gap Substrings(后缀数组+枚举区间优化)
题目大意:给定一个字符串,问有多少字符串满足UVU的形式,要求U非空,V的长度为g。 思路:首先,很容易想到用后缀数组求LCP,能够在O(1)的时间求任意2点的lcp。 一开始我想的是枚举v的起点,然后在v的左侧枚举左端u的起点,设左端u的起点为i,那么u_len等于v的起点减i,然后右端起点固定为j=i+u_len+v_len,那么只要lcp(i,j)为u_len,则ans++。 很可惜,原创 2015-10-10 10:51:41 · 2650 阅读 · 0 评论 -
Manacher算法求回文子串
#include #include #include #include #include #include #include #include #include using namespace std; const int maxn=300007; char str[maxn]; int p[maxn=0;--i){ s[i+i+2]=s[i];原创 2015-10-04 13:01:18 · 1863 阅读 · 0 评论