1337:【例3-2】单词查找树

简介: 1337:【例3-2】单词查找树

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都画出与单词列表所对应的单词查找树,其特点如下:

1.根结点不包含字母,除根结点外每一个结点都仅包含一个大写英文字母;

2.从根结点到某一结点,路径上经过的字母依次连起来所构成的字母序列,称为该结点对应的单词。单词列表中的每个单词,都是该单词查找树某个结点所对应的单词;

3.在满足上述条件下,该单词查找树的结点数最少。

4.例如图3-2左边的单词列表就对应于右边的单词查找树。注意,对一个确定的单词列表,请统计对应的单词查找树的结点数(包含根结点)。

【输入】

为一个单词列表,每一行仅包含一个单词和一个换行/回车符。每个单词仅由大写的英文字母组成,长度不超过63个字母 。文件总长度不超过32K,至少有一行数据。

【输出】

仅包含一个整数,该整数为单词列表对应的单词查找树的结点数。

【输入样例】

A

AN

ASP

AS

ASC

ASCII

BAS

BASIC

【输出样例】

13

1. #include <iostream>
2. #include <cstdio>
3. #include <algorithm>
4. using namespace std;
5. string s[10000];
6. int main()
7. {
8.  int n=0,cnt=0;
9.  while(cin>>s[n++]);
10.   n--;
11.   sort(s,s+n);
12.   cnt=s[0].length();
13.   for(int i=1;i<n;i++){
14.     unsigned int len=0;
15.     while(len<s[i-1].length() && len<s[i].length() && s[i-1][len]==s[i][len])
16.       len++;
17.     cnt+=s[i].length()-len;
18.   }
19.   cout<<cnt+1<<endl;  
20. return 0;
21. }


相关文章
|
10月前
|
存储 Java
Java数据结构之第十五章、Trie(前缀树/单词查找树)
1.前缀树的概念:前缀树又叫字典树或单词查找树(高效的存储和查找字符串集合的数据结构)。2.3.存储形式:存储的字符串可能:全是 小写字母 或全是 大写字母 或全是 数字 或全是 0和1。它是一棵,每个代表一个,从。字典树的根节点不包含字符,每个子节点代表一个字符,从根节点到任意一个节点所经过的路径上的字符连接起来即为该节点所代表的字符串。每个节点可以存储一个或多个字符串,通常使用一个标志来标记一个节点代表的字符串是否存在。当需要在一组字符串中查找某个字符串时,可以利用字典树来实现高效的查找操作。
47 0
|
12月前
理解前缀树
理解前缀树
40 0
|
存储 机器学习/深度学习 算法
|
存储 自然语言处理 算法
一种好用的树结构:Trie树
一种好用的树结构:Trie树
143 0
一种好用的树结构:Trie树
|
存储
前缀树
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
61 0
前缀树
|
机器学习/深度学习 存储 自然语言处理
Trie树
Trie树
81 0
|
Java C++
字典树(前缀树)
字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。
86 0
|
存储 自然语言处理 算法
字典树详解
字典树,顾名思义,是关于“字典”的一棵树。即:它是对于字典的一种存储方式(所以是一种数据结构而不是算法)。
131 0
字典树详解
修剪二叉搜索树
#### [669. 修剪二叉搜索树](https://leetcode.cn/problems/trim-a-binary-search-tree/)
|
存储
【22. Trie树】
**用途** - 高效地存储和查找字符串集合的数据结构 **主要思想:** - 利用字符串的公共前缀来节约存储空间。很好地利用了串的公共前缀,节约了存储空间。字典树主要包含两种操作,插入和查找。
91 0
【22. Trie树】