【学习记录】24.02.20 字符串
字符串算法
(感谢学长qwq)
Manacher
维护一个区间
- 若
i>r ,暴力求解; - 否则考虑
d_{l+r-i} ,即回文串[l,r] 中与i 对应的那一位,令z_i=\min(r-i+1,d_{l+r-i}) 。若用了r-i+1 ,则继续向后暴力扩展; - 最后必须用
i+z_i 尝试更新r 。
求长度为偶数的回文串可以用一个技巧,在两个字符之间均插入一个特殊字符,这样所有的回文串长度均为奇数。
P5446 [THUPC2018] 绿绿和串串
在速通,没听。
exKMP
维护一个区间
- 若
i>r ,暴力求解; - 否则考虑
z_{i-l} ,即i 在[l,r] 中与S 的前缀对应的那一位,令z_i=\min(r-i+1,z_{i-l}) 。若用了r-i+1 ,则继续向后暴力扩展; - 最后必须用
i+z_i 尝试更新r 。P7114 [NOIP2020] 字符串匹配
在自己理解,没听。
学长讲了个性质,对于字符串来说,后缀border以外的部分为该字符串最小周期。
做完以后发现一个性质,字符串非空的最小匹配前缀之外的部分为该字符串最大周期。
KMP
在求
P3435 [POI2006] OKR-Periods of Words
在听学长讲AC自动机,没听。
P2375 [NOI2014] 动物园
做过,在自己写笔记,没听。
P5829 【模板】失配树
出去了没听,但板子还是课后学一学吧。
对于KMP的
HDU7138 String
还是没听。
KMP自动机
没听懂,后边再看Oiwiki吧。
P3193 [HNOI2008] GT考试
吃饭了不听了。
字典树
P2922 [USACO08DEC] Secret Message G
字典树维护,我以前写过,我写的方法是维护经过某节点的字符串数量和终止于某节点的字符串数量,简单容斥求解。
AC自动机
对于多个字符串,建出Trie后在Trie上求
若
-
若
trie_{fail_p,c} 存在,则fail_u=trie_{fail_p,c} -
否则不断令
p=fail_p ,直到存在trie_{fail_p,c}
这样维护出的
P5357 【模板】AC 自动机
板子题。
P2414 [NOI2011] 阿狸的打字机
板子不会就放弃。
P3041 [USACO12JAN] Video Game G
板子不会就放弃。
P2444 [POI2000] 病毒
板子不会就放弃。
题目选讲
P5329 [SNOI2019] 字符串
要在
真正看题解要做的时候发现,只要找到相邻两个字符的大小关系,就可以确定它们之前的大小关系,总复杂度为
P3426 [POI2005] SZA-Template
没咋认真听,但题解说应该是用KMP求出
P6216 回文匹配
KMP+Manacher+前缀和,不详细说了可以看题解。
CF1654F Minimal String Xoration
放弃了。