动态建树之——一个单词是否在其他单词中以前缀的形式存在
2016-08-15 14:38
281 查看
题目:poj1056
题意:判断一个单词是否在其他单词中以前缀的形式存在
解答:建立字典树。在读到单词末尾的时候如果发现它已经有了,就返回false
题意:判断一个单词是否在其他单词中以前缀的形式存在
解答:建立字典树。在读到单词末尾的时候如果发现它已经有了,就返回false
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int sonnum = 3; int ok = 1; struct Trie { int num; bool terminal; struct Trie *son[sonnum]; }; Trie *NewTrie() { Trie *temp = new Trie; temp -> num = 1; temp -> terminal = false; for(int i = 0;i < sonnum;i++) temp -> son[i] = NULL; return temp; } void Insert(Trie *pnt,char *s,int len) { Trie *temp = pnt; for(int i = 0;i < len;i++) { if(temp -> son[s[i] - '0'] == NULL) temp -> son[s[i]-'0'] = NewTrie(); else temp -> son[s[i] - '0'] -> num++; temp = temp -> son[s[i] - '0']; } temp -> terminal = true; if(temp -> num > 1) ok = 0; return; } int main() { char a[10]; int num = 1; Trie *tree = NewTrie(); while(~scanf("%s",a)) { if(strlen(a) == 1 && a[0] == '9') { if(ok) printf("Set %d is immediately decodable\n",num++); else printf("Set %d is not immediately decodable\n",num++); Trie *tree = NewTrie(); ok = 1; continue; } Insert(tree,a,strlen(a)); } return 0; }
相关文章推荐
- 一个单词是否为其他字符串的字串
- 翻转子串 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- 检查一个单词是否为其他字符串的子串
- 【路径相关方法】6,判断一个字符串是否为一个文件夹路径形式(无论存在与否)
- 在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递
- 动态建树之——寻找前缀是否是其他字符串
- 给出一个2D板和一个单词,找出这个单词是否存在于网格中。 该单词可以由顺序相邻单元的字母构成,其中“相邻”单元是水平或垂直相邻的单元。 相同的字母单元可能不会被多次使用。
- JavaScript 里如何判断一个字符串里是否存在某个字符串?(支持中文)
- 判断一个对象是否存在
- 在VC里如何检查一个文件是否存在
- 用js写的一个形式为##.dd的动态小数掩码问题,可以处理负值 NumberMask
- 判断一个无符号数是否是2的n次幂形式的数
- 如何判断一个已知的表中是否存在某个字段,如果不存在就创建它.
- JavaScript窗口功能指南之检查一个窗口是否存在
- 一个判断进程是否存在的shell
- PB技巧一《在主表中一个编号一个名称,通过输入判断是否编号存在》
- SQL Server中判断一个数据库是否存在的方法
- [导入]JavaScript窗口功能指南之检查一个窗口是否存在
- JavaScript窗口功能指南之检查一个窗口是否存在
- 利用MYSQL的C API编程,如何确定一个数据库/表是否存在???