题意:给你一堆字符串,问是否满足对于任意两个字符串a、b,a不是b的前缀

字典树==前缀树==Trie树

trie入门题,只用到了insert和query操作

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define maxnode 1000
#define sigma_size 30 //struct Trie
//{
int ch[maxnode][sigma_size]; //ch[i][j]:记录结点i的那个编号为j的子节点
int val[maxnode]; //val[i]:i节点的附加信息,这里我们用来记录是否到一个单词的结束
//(即在trie树上root->i一路下来是否是一个完整的单词)
int sz;
void Trie()
{
sz=;
memset(ch[],,sizeof(ch[]));
}
int idx(char c) //idx(c)即字符c的编号。
{
return c-''; //此处第一个字符是0所以return c-'0'
}
void Insert(string s,int v)
{
int u=,n=s.length();
for (int i=;i<n;i++)
{
int c=idx(s[i]);
if (!ch[u][c])
{
memset(ch[sz],,sizeof(ch[sz]));
val[sz]=;
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=v;
}
bool query(string s) //true:s is a prefix
{
int u=,c;
for (int i=;i<s.length();i++)
{
c=s[i]-'';
if (!ch[u][c]) return false; u=ch[u][c];
if (val[u]==) return true; //若此时s还没走完但trie树上已经走到结尾了,即树上单词是s的前缀
}
return true;
}
//}; bool ok;
string str; int main()
{
//freopen("in.txt","r",stdin); ok=true;
Trie();
int num=;
while (cin>>str)
{
if (str=="")
{
num++;
if (ok)
printf("Set %d is immediately decodable\n",num);
else
printf("Set %d is not immediately decodable\n",num);
ok=true;
Trie();
}
else
{
if (query(str))
ok=false;
Insert(str,);
}
}
}

扩展:

1.用trie实现字符串排序?

直接对trie树前序遍历一遍即可

http://www.cnblogs.com/shuaiwhu/archive/2012/05/05/2484676.html

2.trie还有删除操作,不过实现比较麻烦。先mark一个

http://www.cnblogs.com/dolphin0520/archive/2011/10/11/2207886.html

3.trie在中文分词中的应用

http://blog.csdn.net/wzb56_earl/article/details/7902669

poj1056 (Trie入门)寻找字符串前缀的更多相关文章

  1. POJ 1056 IMMEDIATE DECODABILITY Trie 字符串前缀查找

    POJ1056 给定若干个字符串的集合 判断每个集合中是否有某个字符串是其他某个字符串的前缀 (哈夫曼编码有这个要求) 简单的过一遍Trie就可以了 #include<iostream> ...

  2. Swift入门篇-字符串和字符

    今天主要是介绍一下字符串的用法 ,字符串的语法和object-c语法不太一样,但是思想是一样,就是写法不太一样.如果您对.net和java语法比较熟悉的话,那您几乎没有深压力.如果您对swift 基本 ...

  3. Trie(字典树、前缀树)

    目录 什么是Trie? 创建一棵Trie 向Trie中添加元素 Trie的查询操作 对比二分搜索树和Trie的性能 leetcode上的问题 什么是Trie?   Trie是一个多叉树,Trie专门为 ...

  4. 利用Manacher算法寻找字符串中的最长回文序列(palindrome)

    寻找字符串中的最长回文序列和所有回文序列(正向和反向一样的序列,如aba,abba等)算是挺早以前提出的算法问题了,最近再刷Leetcode算法题的时候遇到了一个(题目),所以就顺便写下. 如果用正反 ...

  5. OO的奇妙冒险——OOP入门与字符串处理

    OO的奇妙冒险 ~OOP入门与字符串处理~ 总体分析 公测 中测(基础与进阶): 其实在我看来,从完成作业的角度来说,中测的基础与进阶并没有任何区别,都不能挂,都不太难,都对得分没有什么影响.中测的样 ...

  6. HDU 3336 输出包括从1到len长 字符串前缀的总个数(+DP)

    Sample Input14abab Sample Output6输出包括从1到len长 字符串前缀的总个数abab:包括2个a,2个ab,1个aba,1个abab # include <cst ...

  7. 实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符 如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少)。并且比其他只出现一次的字符(如"d")首次出现的位置最靠前。

    实现一个算法,寻找字符串中出现次数最少的.并且首次出现位置最前的字符如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少).并且比其 ...

  8. python3入门之字符串

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...

  9. POJ:2406-Power Strings(寻找字符串循环节)

    Power Strings Time Limit: 3000MS Memory Limit: 65536K Description Given two strings a and b we defin ...

随机推荐

  1. VS 扩展推荐

    Visual Studio 工欲善其事,必先利器.本着这样的观念,对于经常使用的工具,我喜欢去研究研究,帮助我提高效率. Visual Studio Microsoft Visual Studio(简 ...

  2. Unity2D 背景图铺满与Camera.Size的计算公式

    在unity制作2D游戏的教程,背景图sprite铺满显示时Camaer的Size调到多少合适,作个笔记. 资源参数 background.png 2048x640,Sprite的像素单位:100 调 ...

  3. 什么是Activity

    Activity 的生命周期是被以下的函数控制的.public class Activity extends ApplicationContext {      protected void onCr ...

  4. 【hibernate】<第一节>hibernate简单入门

    所需工具: ide:eclipse or myeclipse jdk:1.7 jar包:hibernate-distribution-3.6.0.Final 和对应mysql的驱动类(对应jar包如图 ...

  5. C和指针笔记 3.8 static关键字

    当用于不同的上下文环境时,static关键字具有不同的意思. 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标 ...

  6. Thread锁 Monitor类、Lock关键字和Mutex类

    Monitor 类锁定一个对象 当多线程公用一个对象时,也会出现和公用代码类似的问题,这种问题就不应该使用lock关键字了,这里需要用到System.Threading中的一个类Monitor,我们可 ...

  7. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

  8. Android View事件机制 21问21答

    原文: http://www.cnblogs.com/punkisnotdead/p/5179115.html#3358859 1.View的坐标参数 主要有哪些?分别有什么注意的要点? 答:Left ...

  9. 淘宝SKU组合查询算法实现

    淘宝SKU组合查询算法实现 2015-11-14 16:18 1140人阅读 评论(0) 收藏 举报  分类: JavaScript(14)    目录(?)[+]   前端有多少事情可以做,能做到多 ...

  10. 北京联想招聘-Android Framework高级工程师(7-10年) 加入qq 群:220486180 或者直接在此 留言咨询

    Job ID #: 45038 Position Title: Android Framework高级工程师 Location: CHN-Beijing Functional Area: Resear ...