Trie树提供给了一种能够在字符串的长度n时间内判断出来是否在已有集合中已经存在这个字符串了。POJ 1056是判断前缀码的问题。如果所有字符串都不是其他的字符串的前缀的话,那么就是可以直接编码的。
POJ 1056题目大意:
给你几个二进制代码,如果有其中一个代码是另一个的前缀,输出is not immediately decodable,反之,输出immediately decodable。
样例:
Sample Input
01
10
0010
0000
9
01
10
010
0000
9
Sample Output
Set 1 is immediately decodable
Set 2 is not immediately decodable
import java.util.Scanner;
class Trie{
class Node{//字典树节点
Node nxt[]=new Node[10];//儿子节点
boolean end=false;//是否是一个二进制代码的最后一个节点
int count=0;//此节点上通过的字符(数字)个数
}
Node head=null;//字典树的根节点
void clear(){
head=new Node();
}
boolean insert(String str){//构造字典树
Node p=head;
for(int i=0;i< str.length();i++){
p.count++;
if(p.end) return false;//存在前缀
if(p.nxt[str.charAt(i)-'0']==null)
p.nxt[str.charAt(i)-'0']=new Node();
p=p.nxt[str.charAt(i)-'0'];
}
p.count++;
if(p.count>1) return false;//存在前缀
p.end=true;
return true;
}
}
public class Main {
public static void main(String[] args) {
Trie tree=new Trie();
Scanner in=new Scanner(System.in);
int count=0;
while(in.hasNext())
{
String s = in.next();
count++;
tree.clear();
int flag=0;
while (!s.equals("9")) {
if(!tree.insert(s)) flag++;
s = in.next();
}
if (flag!=0) {// 如果存在前缀,输出
System.out.println("Set "+count+" is not immediately decodable");
}
else {// 如果不存在前缀,输出
System.out.println("Set " +count+" is immediately decodable");
}
}
}
}
源码下载:
分享到:
相关推荐
- **解释**:Trie树(字典树)是一种用于存储和检索字符串的高效数据结构。 ### 三、动态规划 #### 1. 基本动态规划 - **例题**:poj2488, poj3083, poj3009, poj1321, poj2251 - **解释**:基本动态规划问题通常...
KMP算法用于在文本中查找模式字符串,AC自动机则适用于构建字符串匹配的字典树。例如,题目poj1961和poj2406就是KMP算法的应用实例。 ### 7. 几何算法 几何算法涉及点、线、面的性质和关系,如凸包、最近点对、...
2. **高级数据结构**:哈希表、堆(最大堆和最小堆)、 Trie 字典树、B树和B+树等。 3. **字符串处理**:模式匹配(KMP、Boyer-Moore、Rabin-Karp等)、字符串操作(子串查找、字符串比较等)。 4. **数学应用**:...
- 字典树(Trie)的构建与查询。 - 字符串哈希的应用。 #### 3. 图论题 图论问题是算法竞赛中的重要组成部分,包括图的遍历、最短路径、最小生成树等问题。 - **知识点**: - 图的表示方法:邻接矩阵、邻接表。 -...
POJ(北京大学在线评测系统,PKU Judge Online)是一个非常著名的在线编程竞赛和练习平台,提供给编程爱好者和学习者大量的练习题,覆盖了从基础到高级的各种算法和数据结构知识。题目按照算法分类可以帮助学习者更...
- **字典树(Trie)**:用于字符串的高效查找和前缀匹配。 - **跳表**:一种随机化的数据结构,提供对有序集合的快速查找。 学习这些数据结构和算法,并通过实践poj题目来加深理解,是提高ACM竞赛能力的关键步骤...
字典树是一种树形结构,用于高效地存储和检索字符键值。 ### 动态规划 1. **背包问题** - POJ 2488, POJ 3083, POJ 3009, POJ 1321, POJ 2251 背包问题是动态规划中的经典问题之一,涉及到如何选择物品放入...
- **示例题目**: 通常这类题目没有特定的POJ编号,但可以通过练习递归和分治的基本题目来掌握。 - **注意事项**: 避免无限递归,并合理设置递归的出口。 **4. 递推** - **定义**: 递推是一种利用前几项的结果来...
6. **数据结构**:如堆(优先队列)、平衡二叉搜索树(AVL、红黑树)、字典树(Trie)等,用于高效地进行查找、插入和删除操作。 7. **模拟**:对于某些问题,可能需要编写程序模拟特定过程,如游戏策略、物理过程...
1.16.17 pku3668_GameofLine_N个点最多确定多少互不平行的直线(poj3668) 99 1.16.18 求凸多边形直径 100 2.组合 102 2.1 组合公式 102 2.2 排列组合生成 102 2.3 生成gray码 104 2.4 置换(polya) 104 2.5 字典序...
6. **Trie树(字典树)**:Trie树是字符串搜索的数据结构,可以高效地进行前缀查找。在题目中,用Trie树存储颜色字符串,每个节点的值可以是颜色的id,用于统计颜色的度(连接次数)。在Trie树中插入颜色时,自动...
2.2.3 字典序最小问题 2.2.4 其他例题 2.3 记录结果再利用的“动态规划” 2.3.1 记忆化搜索与动态规划 2.3.2 进一步探讨递推关系 2.3.3 有关计数问题的DP 2.4 加工并存储数据的数据结构 2.4.1 树和二叉树 2.4.2 优先...