#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.9设计一个方法,找出任意指定单词在一本书中的出现频率
最新推荐文章于 2020-02-01 10:59:39 发布