字典树的操作
2016-01-02 20:09
267 查看
#include <iostream> #include <cstdlib> #include <string> using namespace std; #define MAX 26 typedef struct _Trie { int num; struct _Trie *next[MAX]; }Trie,*PTrie; PTrie root; void InsertTrie(string str) { int len=str.length(); int i,j,pos; PTrie p=root; PTrie q; for(i=0;i<len;i++) { pos=str[i]-'a'; if(p->next[pos]==NULL) { q=(PTrie)malloc(sizeof(Trie)); q->num=1; for(int j=0;j<MAX;j++) { q->next[j]=NULL; } p->next[pos]=q; p=p->next[pos]; } else { p->next[pos]->num++; p=p->next[pos]; } } p->num=0; } // int FindTrie(string str) { int i,pos; int len=str.length(); PTrie p=root,q; for(i=0;i<len;i++) { pos=str[i]-'a'; if(p->next[pos]==NULL) { return -1;//代表没有这样的前缀 } else { p=p->next[pos]; } } return p->num; } int main() { root=(PTrie)malloc(sizeof(Trie)); root->num=1; for(int i=0;i<MAX;i++) { root->next[i]=NULL; } string str1="abc"; string str2="abcd"; string str3="abd"; string str4="b"; string str5="bcd"; string str6="efg"; string hig="hig"; InsertTrie(str1); InsertTrie(str2); InsertTrie(str3); InsertTrie(str4); InsertTrie(str5); InsertTrie(str6); if(FindTrie("ab")==-1) cout<<"没有以这个为前缀的字符串"<<endl; else cout<<"以这个子串为前缀的字符串个数为"<<FindTrie("ab")<<endl; return 0; }
相关文章推荐
- c#中字体的用法与代码
- UIScrollView
- C++学习笔记39——重载输入输出操作符
- 伺服调整
- Deep Learning In NLP 神经网络与词向量
- OpenStack for Glance镜像和实例目录解析
- 利用Theano理解深度学习——Logistic Regression
- iOS完全自学手册——[二]Hello World工程
- 设置搜索关键词的代码
- 嵌入式考试Shell编程题
- UIView动画
- 【成长訪谈】老翟:程序猿的企业家梦想
- longjmp()/setjmp()跳转
- PXC中文文档--第一章
- 数组指针与指针数组
- 1073. Scientific Notation (20)【字符串操作】——PAT (Advanced Level) Practise
- Xcode中常用的快捷键(原文链接http://www.cocoachina.com/ios/20141224/10752.html)
- 关于调用startActivityForResult()方法后Activity直接退出的问题原因和解决办法
- 核心动画 Core Animation
- wdcp 远程连接mysql 出现1130错误 解决办法