#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1010;
const int kind = 26;
char str[N][25];
struct node {
int num;
node* next[kind];
node() {
num = 1;
memset(next, 0, sizeof(next));
}
};
void Insert(node* root, char *s) {
node* p = root;
int i, index;
int len = strlen(s);
for(i = 0; i < len; i++) {
index = s[i] - 'a';
if(p->next[index] == NULL) {
p->next[index] = new node();
}
else {
p->next[index]->num++;
}
p = p->next[index];
}
}
void Find(node* root, int ca) {
int i = 0, index = 0;
for(i = 0; i <= ca; i++) {
node* p = root;
int len = strlen(str[i]);
char *s = str[i];
cout << s << ' ';
for(int j = 0; j < len; j++) {
cout << s[j];
index = s[j] - 'a';
if(p->next[index]->num == 1) {
break;
}
p = p->next[index];
}
cout << endl;
}
}
int main() {
node* root = new node();
int i = 0, ca = 0;
while(scanf("%s", str[i]) == 1) {
Insert(root, str[i]);
i++;
}
ca = i - 1;
Find(root, ca);
return 0;
}
poj 2001 Shortest Prefixes(字典树)
最新推荐文章于 2021-08-05 18:41:49 发布
本文介绍了一种利用字典树进行字符串匹配的方法。通过构建字典树来存储多个字符串,实现高效的查找与匹配。文章详细阐述了字典树节点的设计、插入操作及查找过程,并给出完整的C++实现代码。
547

被折叠的 条评论
为什么被折叠?



