Trie树:POJ2001
这是一道最简单的trie树的题
有趣的是这道题的测试用例无法在VS上调试,只能在框框里不断提交测试了,哈哈
最基本的Trie树,插入和查找操作没什么好说的
注意节点添加一个count变量作为附加条件,记录该字母这这个位置出现的次数,还有几处需要注意的逻辑问题,在注释中标出了
直接上代码了:
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
using namespace std;
char strList[][];
struct node
{
int count;
node* childs[];
node(){
count = ;
int i;
for(i=;i<;i++){
childs[i] = NULL;
}
}
}; node* root = new node;
node* currentNode;
void insert(char *str)
{
int i=;
currentNode = root; for(i=;i<strlen(str);i++){
int index= str[i] - 'a';
if(currentNode->childs[index]!=NULL){
currentNode = currentNode->childs[index];
++(currentNode->count);
}else{
currentNode->childs[index] = new node;
currentNode = currentNode->childs[index];
currentNode->count = ;
}
}
} void search(char *str)
{
currentNode = root;
int i;
char res[];
for(i=;i<strlen(str);i++){
int index = str[i] - 'a';
//if(currentNode->childs[index]!=NULL)//没有必要判断,因为根据题意,此时一定是有的
currentNode = currentNode->childs[index];
res[i] = str[i];
res[i+]='\0';//必须在这里加入'\0',因为如果没有找到,则会跳出,如果在下面的判断中加‘\0’会导致最后没有结尾的'\0'.
if(currentNode->count == ){break;}//输出+return 或者 直接break
}
printf("%s %s\n",str,res);
return;
}
int main()
{
int i,t=;
while(scanf("%s",strList[t])!=EOF)
{
insert(strList[t]);
t++;
}
for (i = ; i < t; ++i)
{
search(strList[i]);
}
return ;
}
Trie树:POJ2001的更多相关文章
- 算法复习——trie树(poj2001)
题目: 题目描述 给出 n 个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己. 输入格式 输入 N 个单词,每行一个,每个单词都是由 1-20 个小写字母构成 ...
- POJ2001 Shortest Prefixes (Trie树)
直接用Trie树即可. 每个节点统计经过该点的单词数,遍历时当经过的单词数为1时即为合法的前缀. type arr=record next:array['a'..'z'] of longint; w: ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- hihocoder-1014 Trie树
hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...
- 洛谷P2412 查单词 [trie树 RMQ]
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...
- 通过trie树实现单词自动补全
/** * 实现单词补全功能 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #incl ...
- #1014 Trie树
本题主要是求构造一棵Trie树,即词典树用于统计单词. C#代码如下: using System; using System.Collections.Generic; using System.Lin ...
- Trie树-字典查找
描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...
随机推荐
- SpringMVC访问静态资源
SpringMVC访问静态资源 在SpringMVC中常用的就是Controller与View.但是我们常常会需要访问静态资源,如html,js,css,image等. 默认的访问的URL都会被Dis ...
- 调试技巧--Windows端口号是否被占用
调试技巧--Windows端口号是否被占用 一.端口概念 10.0.0.0~10.255.255.255,172.16.0.0~172.16.255.255, 192.168.0.0~192.168. ...
- <<人性的弱点>>读书笔记
书名的英文名其实是<< How to win friends and influence people & how to stop worrying and start livin ...
- FM/PCM与FM/PPM的区别
FM/PCM的优点: 1 高可靠性和高抗干扰性.大家知道,一般PPM遥控设备都要求在操作时先开发射机后开接收机,先关接收机后关发射机.其原因是在没有发射信号时,接受机会因自身内部的噪音或外界的 ...
- mfc_随机数生成器
vc++6.0 内涵图
- gerrit集成gitweb:Error injecting constructor, java.io.IOException: Permission denied
使用gerrit账户在centos上安装gerrit,然后集成gitweb,gerrit服务启动失败,查看日志,报错信息如下: [-- ::,] ERROR com.google.gerrit.pgm ...
- [IIS]IIS扫盲(四)
IIS简易安装 义哥门户网 IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMT ...
- (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出
(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安 ...
- display:none与visibility: hidden的区别
display:none和visibility: hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失. ...
- python与正则表达式:re模块详解
re模块是python中处理正在表达式的一个模块 正则表达式知识储备:http://www.cnblogs.com/huamingao/p/6031411.html 1. match(pattern, ...