Facebook Hacker Cup 2015 Round 1--Autocomplete(字典树新建与查询)
2015-03-14 17:44
393 查看
题意:给定N个字符串,让你依次先输入到手机的字典中,再打印出来,打印的时候我们只需要输出字符串的前缀或者全部字符串,要求此前缀不是以往任何字符串的前缀。
题解:典型的字典树,可以利用结构体数组方便的新建与查询,速度比链表更快。只需在插入字符串时统计最长相同的前缀即可。
代码如下:
题解:典型的字典树,可以利用结构体数组方便的新建与查询,速度比链表更快。只需在插入字符串时统计最长相同的前缀即可。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxN 1000005 int 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; }
相关文章推荐
- Facebook Hacker Cup 2015 Round 1 Autocomplete (附带测试数据)
- Facebook Hacker Cup 2015 Round 1 --- Autocomplete
- Facebook Hacker Cup 2015 Round 1 --- Homework
- Facebook Hacker Cup 2015 Round 1 --- Winning at Sports
- Facebook Hacker Cup 2015 Round 1 Winning at Sports (附带测试数据)
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
- Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树形动态规划)
- Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)
- Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
- Facebook Hacker Cup 2015 Round 1 解题报告
- Facebook Hacker Cup 2015 Round 1 Homework(附带测试数据)
- Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)
- 线性筛素数——Homework(2015 Facebook Hacker Cup)
- Facebook hacker cup qualification round 题解
- Facebook Hacker Cup 2017 Round 1 Pie Progress
- Facebook Hacker Cup 2016 Qualification Round The Price is Correct
- Facebook Hacker cup Qualification round Problem 1
- Facebook Hacker Cup 2015
- Facebook Hacker Cup 2015 qualification round解题报告