程序员面试金典 - 面试题 16.02. 单词频率(哈希表/Trie树)
文章目录
- 1. 题目
- 2. 解题
- 2.1 哈希解法
- 2.2 Trie树
1. 题目
设计一个方法,找出任意指定单词在一本书中的出现频率。
你的实现应该支持如下操作:
WordsFrequency(book)
构造函数,参数为字符串数组构成的一本书get(word)
查询指定单词在数中出现的频率
示例:
WordsFrequency wordsFrequency = new WordsFrequency(
{"i", "have", "an", "apple", "he", "have", "a", "pen"});
wordsFrequency.get("you"); //返回0,"you"没有出现过
wordsFrequency.get("have"); //返回2,"have"出现2次
wordsFrequency.get("an"); //返回1
wordsFrequency.get("apple"); //返回1
wordsFrequency.get("pen"); //返回1提示:
book[i]中只包含小写字母
1 <= book.length <= 100000
1 <= book[i].length <= 10
get函数的调用次数不会超过100000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/words-frequency-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 哈希解法
class WordsFrequency {unordered_map<string,int> m;
public:WordsFrequency(vector<string>& book) {for(auto& s : book)m[s]++;}int get(string word) {return m[word];}
};
2.2 Trie树
参考Trie树
class Trie
{public:unordered_map<char,Trie*> next;bool isEnd = false;int count = 0;void insert(string& s){Trie *root = this;for(char ch : s){if(!(root->next).count(ch)){Trie* node = new Trie();root->next.insert(make_pair(ch,node));}root = root->next[ch];}root->isEnd = true;root->count++;}int search(string& s){Trie * root = this;for(char ch : s){if(!(root->next).count(ch)){return 0;}root = root->next[ch];}if(root->isEnd)return root->count;return 0;}
};
class WordsFrequency {Trie *t;
public:WordsFrequency(vector<string>& book) {t = new Trie();for(string& b : book)t->insert(b);}int get(string word) {return t->search(word);}
};
程序员面试金典 - 面试题 16.02. 单词频率(哈希表/Trie树)相关推荐
- [Leetcode][程序员面试金典][面试题16.11][JAVA][跳水板][数学][动态规划]
[问题描述][简单] [解答思路] 边界问题 k=0 ,不能产生跳水板,返回空数组 shorter 等于longer,只有一种跳水板,返回longerk 思路 一般情况,k块木板,k种可能 跳水板的长 ...
- java兰顿蚂蚁解题思路_程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)
1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...
- 程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)
1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...
- 程序员面试金典 - 面试题 16.09. 运算(只用+法做乘除)
1. 题目 请实现整数数字的乘法.减法和除法运算,运算结果均为整数数字, 程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算. 你的实现应该支持如下操作: Operati ...
- 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)
文章目录 1. 题目 2. 解题 2.1 排序 2.2 不排序 1. 题目 给定一个整数数组,编写一个函数,找出索引 m 和 n ,只要将索引区间 [m,n] 的元素排好序,整个数组就是有序的. 注意 ...
- 程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)
1. 题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = &qu ...
- 程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)
1. 题目 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式. 例如,字符串"ca ...
- 程序员面试金典 - 面试题 08.02. 迷路的机器人(DFS/动态规划)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 动态规划 1. 题目 设想有个机器人坐在一个网格的左上角,网格 r 行 c 列. 机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍 ...
- 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)
1. 题目 给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]. 请找出一条直线,其通过的点的数目最多. 设穿过最多点的直线所穿过的全部点编号 ...
最新文章
- 08 Java程序员面试宝典视频课程之内部类
- vue生命周期探究(一)
- Adobe (Acrobat)Reader 6.0以上版本支持对有特殊权限的PDF进行添加注释,填写标单以及保存的功能。...
- 【2017年第4期】大数据平台的基础能力和性能测试
- iPhone清理喇叭灰尘_厉害了,iPhone 专用的网购商品历史最低价查询工具
- Eclipse常用快捷键(转载)
- IDEA ---- 插件
- AS3显示当前帧速率的类:FrameRater Class
- android spp协议,Android蓝牙开发SPP协议通信
- jquery 图像滑块_10个很棒的jQuery图像滑块插件
- Java开发技术有哪些?
- ajax,jsp,java的web应用程序(转)
- 打印系统开发(42)——静默打印
- java+mysql基于JSP0801报刊订阅系统(java,web)
- 20十年后的计算机作文600字,二十年后的我作文600字
- BZOJ 1631==USACO 2007== POJ 3268 Cow Party奶牛派对
- 光荣特库摩游戏《莱莎的炼金工房》宣布动画化,2023 年 7 月开播
- QPBOC快速借贷记流程(2)
- poj 1637 Sightseeing tour 混合欧拉 最大流
- 电脑打字拼音出现下划线,没有中文提示框