简单字典树Trie
来源:互联网 发布:锋锦网络 编辑:程序博客网 时间:2024/05/20 22:29
代码一,正确AC,490ms,72M
#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <cmath>#define MAX 26using namespace std;struct Trie{int num;Trie* next[MAX];Trie(){num=0;for(int i=0;i<MAX;i++)next[i]=NULL;}}*root;void insert(char s[]){Trie* p = root;for(int i=0;s[i];i++){int a=s[i]-'a';if(p->next[a]==NULL)p->next[a]=new Trie;p=p->next[a];p->num++;}}int search(char s[]){Trie* p = root;for(int i=0;s[i];i++){int a=s[i]-'a';if(p->next[a]==NULL)return 0;p=p->next[a];}return p->num;}int main(){ int n,m; char s[20]; //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout);root = new Trie; for(scanf("%d",&n);n--;) scanf("%s",s),insert(s); for(scanf("%d",&m);m--;) scanf("%s",s),printf("%d\n",search(s)); //fclose(stdin);//fclose(stdout); return 0; }
代码二,正确AC,314ms,41M
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct Trie{int ch[1000005][26];int val[1000005],sz;void init(){sz=1;memset(ch[0],0,sizeof(ch[0]));}void insert(char *s){int u=0,len=strlen(s);for(int i=0;i<len;i++){int c=(s[i]-'a');if(!ch[u][c]){memset(ch[sz],0,sizeof(ch[sz]));val[sz]=1;ch[u][c]=sz++;u=ch[u][c];}else{ u=ch[u][c]; val[u]++;}}}int query(char *s){int len=strlen(s),u=0,c;for(int i=0;i<len;i++){ c=s[i]-'a'; if(ch[u][c]) u=ch[u][c]; else return 0;}return val[u];}};Trie T;int main(){ int i,n,m;char s[12];//freopen("in.txt", "r", stdin);while(~scanf("%d",&n)){T.init(); for(i=0;i<n;i++){getchar();scanf("%s",s);T.insert(s);}scanf("%d",&m);for(i=0;i<m;i++){getchar();scanf("%s",s);printf("%d\n",T.query(s));}}//fclose(stdin);return 0;}
代码三,出现未知错误,fatal error: iostream: No such file or directory :#include <iostream> 可能是代码中有地方指针使用不当,望指出
#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <cmath>#define MAX 26using namespace std;typedef struct Trie{int num;struct Trie* next[MAX];}Trie;Trie* create(){Trie* node = new Trie;node -> num = 0;memset ( node->next, 0, sizeof(node->next) );//?return node;}void insert( Trie* root, char *s ){Trie* node = root;char *p = s;int i;while ( *p ){i = *p - 'a';if( node->next[i] == NULL ){node->next[i] = create();}node = node->next[i];node->num += 1;++p;}}int search( Trie* root, char *s ){Trie* node = root;char *p = s;int i;while ( *p ){i = *p -'a';node = node->next[i];if( node == NULL )return 0;++p;}return node->num;}int main ( ) {Trie* root = create();int i, N, M;char s[12];//freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout);cin >> N;for ( i = 0; i < N; i ++ ){cin >> s;insert ( root, s );}cin >> M;for ( i = 0; i < M; i ++ ){cin >> s;cout << search ( root, s ) << endl ;}//fclose(stdin); //fclose(stdout);return 0;}
0 0
- 简单字典树Trie
- 一个Trie字典树的简单实现
- 字典树Trie的简单题目
- 字典树(Trie)的简单实现
- 字典树(Trie树)
- Trie树/字典树
- 字典树(Trie树)
- 字典树---->Trie树
- Trie树(字典树)
- TRIE树 --- 字典树
- trie树(字典树)
- 字典树-----Trie树
- 字典树 trie树
- trie树(字典树)
- 字典树-trie树
- Trie树--字典树
- Trie树(字典树)
- 字典树/Trie树
- Python版本需要是2.7
- spring 数据源JNDI 基于tomcat mysql配置
- 获取软连接指定的真实文件名
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
- iOS 图片扫描(Moodstocks)
- 简单字典树Trie
- 证书的签发者无效的问题
- MQTT协议详解,非常易懂
- 使用极光推送实现分组发送和服务端集成
- iOS WebView与js通信
- Access denied for user 'root'@'localhost' (using password: YES)
- Android自定义对话框
- 深入Java虚拟机(1)——Java体系结构
- ARM Linux 3.x的设备树(Device Tree)