![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
文章平均质量分 63
字符串
IcecreamArtist
咸鱼
展开
-
后缀数组和自动机
后缀数组 算法思路:倍增+基数排序 数组:sa(第i小的后缀的下标),rk(i后缀是第几小)。 时间复杂度:O(nlogn)O(nlogn)O(nlogn) JSOI2007 字符加密(排序循环移动位置) 题意:给出一个串abcde。他有多个循环移动位置:abcde,bcdea,cdeab,…,ebacd。将这些排序。再按从小到大的顺序输出每个串的最后一个字母。 思路:将字串复制为abcdeabcde后计算后缀数组。 #include<bits/stdc++.h> using namespac原创 2021-06-03 15:12:45 · 147 阅读 · 0 评论 -
【codeforces上紫】字符串
D2. Prefix-Suffix Palindrome (Hard version) 题意:给一个字符串,求把他的前缀和后缀拼在一起得到的最长回文串。多个解则输出一解。 Solution1: 所以用hash函数解决(预处理从左到右和从右到左的字符串哈希。枚举对称中心O(n),O(1)计算子串哈希值,比较正着算的哈希是否等于反着算的哈希(O(1)))。(待补) Solution2: 将开头与结尾相同的拿掉之后,直接用Manacher算法求最左和最右的最长回文串。 Solution3: 将开头与结尾相同的拿掉原创 2021-01-19 22:37:54 · 233 阅读 · 0 评论 -
深入理解Manacher
今天开始补牛客国庆啦原创 2020-10-05 23:04:01 · 63 阅读 · 0 评论 -
【字典树、KMP和自动机】
一切开始的地方 AC自动机板子 洛谷3808 AC自动机(简单版) #include<bits/stdc++.h> using namespace std; const int SZ=1000003; const int N=1000003; namespace AC{ int tr[SZ][26],tot; int e[SZ],fail[SZ]; void insert(char *s){ int u=0; for(int i=1;s[i];i++){ if(!tr[u原创 2020-07-24 11:44:18 · 69 阅读 · 0 评论 -
【哈希】
性质 判断字符串是否一致。 题目 简单 BKDRHash:种子一般取31、131等。 void init(){ base[0]=1; for(int i=1;i<N;i++) base[i]=base[i-1]*seed; } void makehash(int len){ for(int i=1;i<=len;i++) _hash[i]=_hash[i-1]*seed+(s[i]-'a'+1); } 取子串的Hash值: ull gethash(int i,int l){原创 2020-07-22 16:37:44 · 110 阅读 · 0 评论