#字符串
Ⅰ输入输出方式:
1.char s[]
scanf()
printf()
gets()
2.String
cin
cout
sstream(可用于非高精度输出x^y)
Hash:
1.工程中常见的hash算法:
md5 sha1 sha256
2.Rabin-Karp:求出每个前缀的hash,O(1)计算出一个子串的hash值
Hash[i] = (hash[i - 1]*p+s[i])%mod
取模方式:
p为大质数,mod为超大质数。
p 超过字符集大小,奇数 13131
base和mod互质
(要注意模数的限制)mod一个自己都不知道的数,眼睛闭上随便按。
3.对于Codeforces 赛制允许Hack
(1) srand(time(0));
int p = 1e15 + rand();
(2)
利用CF不能复制代码
在程序里面打一个10k的表
求和作为p
(3)原理
相同的字符串,hash一定相同
不同的字符串,hash尽量不同
hash相同,字符串 很可能相同 直接认为是相同的
hash不同,字符串 一定不同
4. hash常与二分结合(二分字符串长度)
5. map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:
插入: O(logN) 查看:O(logN) 删除:O(logN)
6. hash_map, hash_set, hash_multimap, and hash_multiset
上述四种容器采用哈希表实现,不同操作的时间复杂度为:
插入:O(1),最坏情况O(N)。
查看:O(1),最坏情况O(N)。
删除:O(1),最坏情况O(N)。 如果你采用合适的哈希函数,你可能永远不会看到最坏情况。

本文介绍多种字符串处理技术,包括输入输出方法、哈希算法的应用、KMP算法及其改进、最小表示法、Manacher算法等,并探讨了后缀数组及自动机等高级主题。

1273

被折叠的 条评论
为什么被折叠?



