您的位置:首页 > 职场人生

程序员面试金典——解题总结: 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐