程序员面试金典——解题总结: 9.17中等难题 17.9设计一个方法,找出任意指定单词在一本书中的出现频率
2017-01-17 00:11
543 查看
#include <iostream> #include <stdio.h> #include <vector> #include <string.h> #include <hash_map>//hash_map #include <algorithm> using namespace std; /* 问题:设计一个方法,找出任意指定单词在一本书中的出现频率 分析:这个明显是信息检索中倒排索引的使用。倒排索引需要使用链表数组和哈希来做。 但是可能存在一个问题:假设单词1和单词2通过哈希函数得到的哈希值相同,那么:获取单词出现次数的时候,需要比较 对于Java而言可以使用HashTable,对于Python,它并没有自己的哈希函数,所以需要自己写。 对于C++,存在 关键: 1 hash_map<string , int> wordToTimes; #include <hash_map> 2 简单的题目一定要对输入参数检查 //易错,一定做判空处理 if(word.empty() || wordToTimes.empty()) { return 0; } transform(word.begin() , word.end() , word.begin() , tolower);//先转小写后再查询 3 #include <algorithm> //注意信息检索中全部存放转换为小写的 transform(word.begin() , word.end() , word.begin() , tolower); */ hash_map<string , int> generateWordTable(vector<string>& words ) { string word; hash_map<string , int> wordToTimes; for(vector<string>::iterator it = words.begin() ; it != words.end() ; it++) { word = *it; //注意信息检索中全部存放转换为小写的 transform(word.begin() , word.end() , word.begin() , tolower); hash_map<string , int>::iterator itFind = wordToTimes.find(word); if( itFind != wordToTimes.end()) { itFind->second++; } else { wordToTimes.insert(pair<string , int>(word , 1)); } } return wordToTimes; } int getFrequency(hash_map<string , int>& wordToTimes , string word) { //易错,一定做判空处理 if(word.empty() || wordToTimes.empty()) { return 0; } transform(word.begin() , word.end() , word.begin() , tolower);//先转小写后再查询 hash_map<string , int>::iterator itFind = wordToTimes.find(word); if( itFind != wordToTimes.end()) { return itFind->second; } else { return 0; } } int main(int argc , char* argv[]) { getchar(); return 0; }
相关文章推荐
- 程序员面试金典——解题总结: 9.17中等难题 17.12设计一个算法,找出数组中两数之和为指定值的所有整数对。
- 设计一个方法,找出任意指定单词在一本书中的出现频率。
- 程序员面试金典——解题总结: 9.17中等难题 17.4编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。
- 程序员面试金典——解题总结: 9.17中等难题 17.3设计一个算法,算出n阶乘有多少个尾随0
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 程序员面试金典——解题总结: 9.17中等难题 17.11给定rand5(),实现一个方法rand7()。也就是,给定一个产生0到4(含)随机数的方法,编写一个产生0到6(含)随机数的方法
- 程序员面试金典——解题总结: 9.17中等难题 17.6给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n - m越小越好,也就是说,找出
- 程序员面试金典——解题总结: 9.17中等难题 17.1编写一个函数,不用临时变量,直接交换两个数
- 程序员面试金典——解题总结: 9.17中等难题 17.7给定一个整数,打印该整数的英文描述(例如 "One Thousand,Two Hundred-Thirty Four")
- 程序员面试金典——解题总结: 9.18高难度题 18.4编写一个方法,数出0到n(含)中数字2出现了几次
- 程序员面试金典——解题总结: 9.18高难度题 18.9随机生成一些数字并传入某个方法。编写一个程序,每当收到新数字时,找出并记录中位数。
- 程序员面试金典——解题总结: 9.18高难度题 18.6设计一个算法,给定10亿数字,找出最小的100万个数字。假定计算机内存足以容纳全部10亿个数字。
- 程序员面试金典——解题总结: 9.18高难度题 18.8给定一个字符串s和一个包含较短字符串的数组T,设计一个方法,根据T中的每一个较短字符串,对s进行搜索
- 程序员面试金典——解题总结: 9.18高难度题 18.7给定一组单词,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。
- 17.9设计一个函数,找到给定单词在一本书中的出现次数
- 程序员面试金典——解题总结: 9.17中等难题 17.2判断井字游戏中某个玩家是否赢了游戏
- 程序员面试金典——解题总结: 9.18高难度题 18.10给定两个字典里的单词,长度相等。编写一个方法,将一个单词变换成另一个单词,一次只改动一个字母。
- 程序员面试金典——解题总结: 9.18高难度题 18.13给定一份几百万个单词的清单,设计一个算法,创建由字母组成的最大矩形
- 程序员面试金典——解题总结: 9.17中等难题 17.5珠玑妙算游戏
- 程序员面试金典——解题总结: 9.18高难度题 18.11给定一个方阵,其中每个单元(像素)非黑即白。设计一个算法,找出四条边都是黑色像素的最大子方阵。