博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字典树模板
阅读量:7031 次
发布时间:2019-06-28

本文共 4582 字,大约阅读时间需要 15 分钟。

#include
#include
using namespace std;//表示next数组的长度,表示26个字母。如果字符串中有其他字符的话,应相应调整。//如果所有的字符串都是手机号的话,那就是10了const int MAX_NUM = 26;struct trieNode{ int i;//按需使用,本例子中表示从头到本字符组成的前缀出现的次数 struct trieNode *next[MAX_NUM];};trieNode* CreateTrieNode(){ trieNode *p = new trieNode; p->i = 1; for(int i = 0; i < MAX_NUM; i++) p->next[i] = NULL; return p;}void DelTrieTree(trieNode *p){ for(int i=0;i < MAX_NUM; i++) { if(p->next[i] != NULL) DelTrieTree(p->next[i]); } delete p;}void InsertTrieTree(trieNode **root, string str){ trieNode *p; if(*root == NULL){ p = CreateTrieNode(); *root = p; } else p = *root; int len = str.length(); int k; for(int i = 0; i < len; i++){ k = str.at(i) - 'a'; if(p->next[k] != NULL) p->next[k]->i += 1; else p->next[k] = CreateTrieNode(); p = p->next[k]; }}int SearchTrieTree(trieNode **root, string str){ trieNode *p; if(*root == NULL) return 0; p = *root; int k, len = str.length(); for(int i = 0; i < len; i++){ k = str.at(i) - 'a'; if(p->next[k] == NULL) return 0; p = p->next[k]; } return p->i;}int main(){ trieNode *root = NULL; InsertTrieTree(&root, "checking"); InsertTrieTree(&root, "check"); InsertTrieTree(&root, "for"); InsertTrieTree(&root, "checking"); InsertTrieTree(&root, "program"); InsertTrieTree(&root, "programmer"); InsertTrieTree(&root, "cheprogrammer"); cout << SearchTrieTree(&root, "che") << endl;//输出3 cout << SearchTrieTree(&root, "prog") << endl;//输出2}

 

该题字典树,在插入是把字符串分解成0到1到len的字符串后在插入。该题编译器需要选择C++,如果选择G++,内存过不了。笔者就是入了编译器的坑,浪费了半天时间在优化内存,结果发现C++编译器后直接就AC了。

#include
#include
#include
using namespace std;#define N (26)struct Node{ int i; int k; Node* next[N]; Node(int ik) { i = 1; k = ik; for(int j = 0;j
next[i]); delete p; p = NULL;}void InsertNode(const char str[],int index){ Node* p = root; for(int i=0;i
next[k]) { if(p->next[k]->k != index) { ++p->next[k]->i; p->next[k]->k = index; } } else { p->next[k] = new Node(index); } p = p->next[k]; }}int SearchNode(const char str[]){ Node *p = root; for(int i=0;i
next[k]) p = p->next[k]; else return 0; } return p->i;}int main(){ int p,q; while(~scanf("%d",&p)) { root = new Node(0); for(int i=0;i
View Code

 ,该题编译器需要选择C++,不然内存有挂了。

#include
#include
#include
#include
using namespace std;#define N (26)struct Node{ int i; Node* next[N]; Node() { i = 1; for(int i=0;i
next[i]); delete p;}void InsertNode(char* str){ Node *p = root; for(int i=0;i
next[k]) ++p->next[k]->i; else p->next[k] = new Node(); p = p->next[k]; }}int SearchNode(char* str){ Node *p = root; for(int i=0;i
next[k]) p = p->next[k]; else return 0; } return p->i;}int main(){ char str1[11],str2[11]; while(gets(str1)) { if(str1[0]==0) break; InsertNode(str1); } while(gets(str2)) { printf("%d\n",SearchNode(str2)); } return 0;}
View Code

 

,该题需要从单纯len=1到len-1遍历,并且需要判断是否是单词

#include
#include
#include
#include
#include
using namespace std;#define N (26)struct Node{ int i; Node* next[N]; Node() { i = 1; for(int j=0;j
i; else next[k] = new Node(); } Node* GetNext(const char c) { return next[c-'a']; }};Node *root = NULL;void InsertNode(char* str){ Node *p = root; int len = strlen(str); for(int i=0;i
SetNext(str[i]); p = p->GetNext(str[i]); }}int SearchNode(char* str){ Node *p = root; int len = strlen(str); for(int i=0;i
GetNext(str[i]); if(p==NULL) return 0; } //处理是否是单词 int ti = 0; for(int i=0;i
next[i]) { ti += p->next[i]->i; if(ti == p->i) return 0; } return p->i;}void DelNode(Node *p){ if(p == NULL) return; for(int i=0;i
next[i]); delete p;}int main(){ vector
vs; root = new Node(); char str[50]; while(~scanf("%s",str)) { //if(strcmp(str,"ok")==0) break; vs.push_back(str); InsertNode(str); } int nSize = vs.size(); for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/jlyg/p/7244864.html

你可能感兴趣的文章
找出无序数组中第k小的数
查看>>
小白学数据分析----->Excel复合图之复合雷达图
查看>>
将json对象转化为xml、soap字符串
查看>>
matlab学习:最小二乘拟合&基于RANSAC的直线拟合&椭圆拟合
查看>>
HBase如何合理设置客户端Write Buffer
查看>>
UML系列:前序:序列图
查看>>
BW Query设计中公式冲突解决方案
查看>>
Chrome — 让<input>标签支持语音搜索 x-webkit-speech
查看>>
关于买带宽的理解
查看>>
简单Linux C线程池2
查看>>
About | InformIT
查看>>
XManager客户端连接AIX 6.1初体验
查看>>
QWidget,QMainWindow和QDialog的区别
查看>>
VS2010有自带的数据对比功能
查看>>
Windows 8 页面应用测试(2)
查看>>
新手学信息检索6:谈谈二值独立模型
查看>>
Core Foundation 框架
查看>>
sublime text 2 学习
查看>>
windows 下mysql 主从库的配置
查看>>
微软下一代内存数据库Hekaton的演讲PPT
查看>>