计算一个字符串数组中有多少个重复字符串出现。
如果直接使用map容器,那么这条题就很简单了,一下就AC了,因为map已经处理好一切了;
不过时间超过1532ms,有点慢。
如下:
int main()
{
map
msi;
int total = 0;
char treeName[40];
while (gets(treeName))
{
msi[treeName]++;
total++;
}
for (map
::iterator it = msi.begin(); it != msi.end(); it++) { string s = it->first; printf("%s ", s.c_str()); printf("%.4f\n", (float)(it->second)/(float)total * 100.0f); } return 0; }
使用Trie可以加速到750ms。
本题注意就是节点孩子需要开到256个,十分大,因为输入没有注明是限定在上面字符范围内的,可以是空格,大小字符,也可以使其他字符,反正是ASCII都可能,故此需要开到256.
除此之外,就是一般的Trie操作,只需要使用插入和遍历操作就可以了。
#include
#include
#include