Autocomplete(字典树新建与查询)

题意:给定N个字符串,让你依次先输入到手机的字典中,再打印出来,打印的时候我们只需要输出字符串的前缀或者全部字符串,要求此前缀不是以往任何字符串的前缀。 题解:典型的字典树,可以利用结构体数组方便的新建与查询,速度比链表更快。只需在插入字符串时统计最长相同的前缀即可。

代码如下:

;#define maxN 1000005int totIndex;struct node{int sons[26];}dict[maxN];int dictInsert(char* s){int now;int tmp;int num = 0;int L = strlen(s);now = 0;while(*s){tmp = *s-‘a’;if(dict[now].sons[tmp] == 0){dict[now].sons[tmp] = ++totIndex;}else//已经有相同的前缀{num++;}now = dict[now].sons[tmp];s++;}num++;return num > L ? L : num;//字符串是已经出现字符串的前缀,,则应该输出完整的字符串 }int main(){freopen(“in.txt”,”r”,stdin);freopen(“out.txt”,”w”,stdout);int T;int N;int minNum;char s[maxN];scanf(“%d”,&T);for(int i = 1;i <= T;i++){memset(dict,0,sizeof(dict));totIndex = 0;minNum = 0;printf(“Case #%d: “,i);scanf(“%d”,&N);getchar();while(N–){gets(s);minNum += dictInsert(s);}printf(“%d\n”,minNum);}return 0;}

积极的人在每一次忧患中都看到一个机会,

Autocomplete(字典树新建与查询)

相关文章:

你感兴趣的文章:

标签云: