这是一道最简单的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的更多相关文章

  1. 算法复习——trie树(poj2001)

    题目: 题目描述 给出 n 个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己. 输入格式 输入 N 个单词,每行一个,每个单词都是由 1-20 个小写字母构成 ...

  2. POJ2001 Shortest Prefixes (Trie树)

    直接用Trie树即可. 每个节点统计经过该点的单词数,遍历时当经过的单词数为1时即为合法的前缀. type arr=record next:array['a'..'z'] of longint; w: ...

  3. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  4. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  5. hihocoder-1014 Trie树

    hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...

  6. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  7. 通过trie树实现单词自动补全

    /** * 实现单词补全功能 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #incl ...

  8. #1014 Trie树

    本题主要是求构造一棵Trie树,即词典树用于统计单词. C#代码如下: using System; using System.Collections.Generic; using System.Lin ...

  9. Trie树-字典查找

    描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...

随机推荐

  1. linux shell:mysql bin_log定期清理脚本

    需求: 1.自动处理mysql bin日志脚本 2.输出可读log 3.保留1周的日志 4.对所有数据库统一处理.   实现过程描述:   思路:两种方式实现 1.mysql目录通过ls获取bin日志 ...

  2. linux下mysql远程访问

    // */ // ]]>   linux下mysql远程访问 Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,但项目中必须要远程导 入导出数据,所以研究了一下. Tab ...

  3. 关于动态生成data组件

    /*! * WeX5 v3 (http://www.justep.com) * Copyright 2015 Justep, Inc. * Licensed under Apache License, ...

  4. Kafka安装及部署

    安装及部署 一.环境配置 操作系统:Cent OS 7 Kafka版本:0.9.0.0 Kafka官网下载:请点击 JDK版本:1.7.0_51 SSH Secure Shell版本:XShell 5 ...

  5. ubuntu14升级到15后遇到的问题

    ubuntu14的unity坏了,于是就找了个镜像升级到15.但是升级完android开发环境出了点问题.. 1:Picked up JAVA_TOOL_OPTIONS: -javaagent:/us ...

  6. 字符串连接,数字tostring,写入文件

    #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int x=2410; in ...

  7. 每天一个Linux命令(3):pwd命令

    Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

  8. RH LINUX5.5 RAW绑定

    ****************ORACLE 11G RAC***********************Disk /dev/sdb: 2147 MB, 2147483648 bytes67 head ...

  9. Django model中常见Field types , Field options

    AutoField :自增,数据库 BooleanField:布尔型 CharField:字符型 DateField:日期,datetime.date类的实例.有两个常用的option,auto_no ...

  10. dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复

    dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复 环境: OS: CentOS 6.5 DB: Oracle 10.2.0.5 1.主备库环境 主库: SQL> sel ...