赞
踩
- #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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。