关于 字符串 的一些认识

先说明一点:我字符串学得不好...

\(CSP\) 之前貌似只有 哈希,KMP,Manacher 会有用

AC 自动机建议 \(CSP\) 前有所了解,省选前一定要学透彻

\(CSP\) 后强烈建议学好 SA 和 SAM ,讲课要找一个靠谱的人讲(__wfx 讲的我很长一段时间都怀疑人生)

PAM 可以看情况学。

哈希

挺神奇的一种思路,把字符串的判定相同由 \(O(n)\) 变成了 \(O(1)\),往set/vector等容器里存的时候空间也小了很多。

然而字符串问题中有很多是匹配问题,所以哈希用途很广。

一段区间的hash可以通过O(n)预处理后O(1)求.

hash放到树上也可以O(n)预处理后O(1)求.

KMP

匹配字符串的利器,时间复杂度也很优秀

Manacher

求回文的利器,知道回文半径后很多回文字符串题都变得很简单。

和PAM的一个区别:Manacher 需要离线,PAM可以在线。

AC 自动机

和 KMP 有相似之处,只不过AC自动机可以用来解决多串匹配问题

SA

求出 heigth 数组后能干好多东西。空间还小,建议学会 \(O(nlogn)\) 的求法,\(O(n)\) 的求法没太大必要学

SAM

解决字符串问题的大杀器,注意字符集的大小会影响时间复杂度和空间复杂度。

如果出题人很毒瘤的话,一些问题只能用SA来解决(虽然SA能解决的SAM也能解决)

posted @ 2020-06-16 07:34  wljss  阅读(134)  评论(0编辑  收藏  举报