//可以直接使用STL的countclass Frequency {
public:
int getFrequency(vector<string> article, int n, string word) {
return count(article.begin(), article.end(), word);
}
};
当然,使用trie树要更加的节省空间(当然前提是这个文章可能被查找很多次)
struct Node{
char data;
int cnt;
int ch[2],next;// 0 left child, 1 right child
Node(){}
Node(char c):data(c){cnt=ch[0]=ch[1]=next=0;}
};
struct Trie{
Node* node;
int nodecount;
Trie(){
node=new Node[500005];
node[0]=Node('n');
nodecount=1;
}
~Trie(){
delete [] node;
}
int appendnode(char x){
node[nodecount]=Node(x);
return nodecount++;
}
void append(intid,constchar* str){
while(*str){
if(*str==node[id].data){
if(!str[1])node[id].cnt++;
if(!node[id].next&&str[1]){
node[id].next=appendnode(str[1]);
}
id=node[id].next;
str++;
}else{
int cid=*str<node[id].data?0:1;//0 left child, 1 right childif(!node[id].ch[cid]){
node[id].ch[cid]=appendnode(str[0]);
}
id=node[id].ch[cid];
}
}
}
int find(intid,constchar *str){
while(*str){
if(*str==node[id].data){
if(!str[1])returnid;
if(!node[id].next){
return -1;
}
id=node[id].next;
str++;
}else{
int cid=*str<node[id].data?0:1;//0 left child, 1 right childif(!node[id].ch[cid]){
return -1;
}
id=node[id].ch[cid];
}
}
return -1;
}
};
class Frequency {
public:
int getFrequency(vector<string> article, int n, string word) {
Trie trie;
for(int i=0;i<n;i++){
trie.append(0,article[i].c_str());
}
intid=trie.find(0,word.c_str());
return trie.node[id].cnt;
}
};