题目链接:https://vjudge.net/problem/HDU-1251

题意:给定一系列字符串之后,再给定一系列前缀,对每个前缀查询以该字符串为前缀的字符串个数。

思路:

  今天开始学字典树,从入门题开始。用数组实现,count数组表示每个结点出现次数,trie[0]为根节点。插入和查询一个字符串的复杂度为O(len)。len为字符串的长度。

AC code:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; const int maxn=1e6+; //树的大小,尽量开大点
int trie[maxn][],num[maxn],cnt;
char str[]; void insert(char *s){
int len=strlen(s);
int u=;
for(int i=;i<len;++i){
int t=s[i]-'a';
if(!trie[u][t]){
++cnt;
memset(trie[cnt],,sizeof(trie[cnt]));
trie[u][t]=cnt;
}
u=trie[u][t];
++num[u];
}
} int query(char *s){
int len=strlen(s);
int u=;
for(int i=;i<len;++i){
int t=s[i]-'a';
if(!trie[u][t]) return ;
u=trie[u][t];
}
return num[u];
} int main(){
cnt=;
memset(trie[],,sizeof(trie[]));
memset(num,,sizeof(num));
while(gets(str),str[]!='\0')
insert(str);
while(~scanf("%s",str))
printf("%d\n",query(str));
return ;
}

最新文章

  1. iOS开发系列--C语言之构造类型
  2. JVM原理讲解和调优
  3. web基础知识小记
  4. python基础——错误处理
  5. new 运算符
  6. Android_2015-04-07 Android中Intent的使用
  7. 11-17的学习总结(DOMfirstday)
  8. [Locked] Wiggle Sort
  9. CoreCRM 开发实录 —— 单元测试之 Mock UserManager 和 SignInManager
  10. Node.js:常用工具util
  11. 【分享】bootstrap学习笔记
  12. L9,a cold welcome
  13. git remote log error
  14. CTF杂项之BubbleBabble加密算法
  15. Java NIO系列教程(八)JDK AIO编程
  16. restful规范整理
  17. Office常用技巧
  18. tcp_timestamps和tcp_tw_recycle
  19. spring boot ----&gt; spring boot 和spring的联系
  20. linux命令学习之:vim

热门文章

  1. Day11:Flex布局
  2. warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem native extension
  3. python 链表的实现
  4. Intellij IDEA 从入门到上瘾 图文教程
  5. fluent-动网格-动态层
  6. 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入
  7. Tosca 给定义变量,取内容放到变量里
  8. 001 安装mysql
  9. springboot启动提示连接mysql报错:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required
  10. 在excel图表上添加数据标签