静态版本
#include <cstdio> #include <cstring> using namespace std; int ch[maxnode][sigma_size]; int val[maxnode]; int sz; void init() { sz = 1; memset(ch[0], 0, sizeof(ch[0])); } int idx(char c) { return c - 'a'; } void insert(char *s) { int u = 0, n = strlen(s); for(int i = 0; i < n; i++) { int c = idx(s[i]); if(!ch[u][c]) { memset(ch[sz], 0, sizeof(ch[sz])); val[sz] = 0; ch[u][c] = sz++; } u = ch[u][c]; } val[u] = 1; } void find(char *s) { int u = 0, n = strlen(s); for(int i = 0; i < n; i++) { printf("%c", s[i]); int c = idx(s[i]); u = ch[u][c]; if(val[u] == 1) break; } }