#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string>
#include <queue>
#include <map>
#define INF 0x3f3f3f3f3f3f
#define max 500+10
#define ll long long
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn = 111111;
struct node{
int son[26],size;
}tree[2*maxn];
int cnt;
void insert(char *s){
int n = strlen(s);
int now = 1,val;
for(int i = 0;i < n;i++){
val = s[i]-'a';
if(tree[now].son[val] == 0)//cteate node
tree[now].son[val] = ++cnt;
now = tree[now].son[val];
tree[now].size++;
}
}
int find(char *s){
int n = strlen(s);
int now = 1,val;
for(int i = 0;i<n;i++){
val = s[i]-'a';
now = tree[now].son[val];
if(tree[now].size==1)
return i+1;
}
return n;
}
char str[1111][33];
int len,ans;
int main(){
ms(tree,0);
cnt = 1;
len = 0;
while(cin>>str[++len]&&str[len][0]!='0'){
insert(str[len]);
}
for(int i = 1;i<=len;i++){
ans = find(str[i]);
cout<<str[i]<<" ";
str[i][ans] = '\0';
cout<<str[i]<<"\n";
}
int nnn;
cin>>nnn;
return 0;
}
poj 2001(字典树)
最新推荐文章于 2022-04-09 22:28:03 发布
本文深入探讨了AC自动机在字符串匹配中的应用,通过Trie树的构建与优化,实现了高效的模式匹配算法。文章详细介绍了Trie树节点结构,包括子节点数组、节点大小等属性,并提供了插入和查找操作的具体实现。此外,还讨论了如何通过预处理减少匹配过程中的回溯,提高搜索效率。
&spm=1001.2101.3001.5002&articleId=103934021&d=1&t=3&u=097e75e15b0248e1b711c4bee2bd4b59)
819

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



