字典树模版(指针) + (数组)
#include<bits/stdc++.h>
using namespace std;
char ch[20];
struct node {
int count;
node *child[26];
};
node start;
node *temp = &start;
void insert(int p) {
if(p == strlen(ch)){
return ;
}
if(temp->child[ch[p] - 'a'] != NULL){
temp = temp->child[ch[p] - 'a'];
}else {
temp->child[ch[p] - 'a'] = (struct node*)malloc(sizeof(struct node));
temp = temp->child[ch[p] - 'a'];
memset(temp, 0, sizeof(node));
}
temp->count++;
insert(p+1);
}
int search(int p){
if(p == strlen(ch)){
return temp->count;
}
if(temp->child[ch[p] - 'a'] != NULL){
temp = temp->child[ch[p] - 'a'];
}else {
return 0;
}
return search(p + 1);
}
int main() {
memset(temp, 0, sizeof(node));
while(gets(ch)){
temp = &start;
if(strlen(ch) == 0){
break;
}
insert(0);
}
while(gets(ch)){
temp = &start;
if(strlen(ch) == 0){
break;
}
printf("%d\n",search(0));
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int tree[1000010][26];
int num[1000010] = {0};
int pos = 1;
void build(char word[]) {
int c = 0;
for(int i = 0; word[i]; i++) {
int n = word[i] - 'a';
if(tree[c][n] == 0) {
tree[c][n] = pos++;
}
c = tree[c][n];
num[c]++;
}
}
int find(char word[]) {
int c = 0;
for(int i = 0; word[i]; i++) {
int n = word[i] - 'a';
if(tree[c][n] == 0) {
return 0;
}
c = tree[c][n];
}
return num[c];
}
int main() {
char word[11];
while(gets(word)) {
if(word[0] == NULL) {
break;
}
build(word);
}
while(gets(word)) {
printf("%d\n",find(word));
}
return 0;
}