题意
给出一个字符串(
s
),并且给出字符串中有多少种字符(
输入
输出
保证结果不大于 1.6×107 。
思路
这个题几乎所有的数据都没给范围,让我头疼不已。
首先我们要多次比较字符串,所以我们对字符串进行多项式哈希:
hshstringi=hshstringi−1∗SEED+si
这样之后就可以快速得到任意子串的哈希值。现在问题变成了多个整数中有多少是不重复的。用树类的数据结构在这个题的数据强度下是不可行的(理由是我自己没弄过去);所以这个问题又要使用哈希表。
于是这样哈希啊哈希就可以(艰难地)通过这个题目了。最后我开了大约 107 大小的哈希表。
不过就在写这篇博客的时候,我突然想到,这个题目拟要使用的哈希值其实就在 O(N) 的数量里面,对字符串用多项式哈希好像有点浪费。所以如果换一种好一点的哈希方法说不定能更轻松?
代码:https://code.csdn.net/snippets/1584126/master/poj1200.cpp/raw