码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2752

时间:2017-08-25 19:25:03      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:set   std   字符串   const   print   printf   next   name   max   

http://poj.org/problem?id=2752

题意:给一个字符串,问你前缀和后缀相同的位置有哪些

思路:很意思的一个题目,也发现了next数组隐藏着一个规律,就是next[len]的值就是最大前缀后缀相同的个数

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 #include <algorithm>
 5 const int maxn = 1e6+5;
 6 using namespace std;
 7 
 8 int next[maxn];
 9 char str[maxn];
10 
11 vector<int>s;
12 
13 void getnext(char str[])
14 {
15     int len = strlen(str);
16     next[0] = -1;
17     int i = 0,j = -1;
18     while(i<len)
19     {
20         if(j==-1||str[i]==str[j])
21             next[++i] = ++j;
22         else
23             j = next[j];
24     }
25 }
26 
27 
28 int main()
29 {
30     while(~scanf("%s",str))
31     {
32         s.clear();
33         memset(next,0,sizeof(next));
34         getnext(str);
35         int len = strlen(str);
36         while(len){
37             s.push_back(len);
38             len = next[len];
39         }
40         sort(s.begin(),s.end());
41         printf("%d",s[0]);
42         for(int i = 1;i<s.size();i++)
43             printf(" %d",s[i]);
44         printf("\n");
45     }
46     return 0;
47 }

 

poj 2752

标签:set   std   字符串   const   print   printf   next   name   max   

原文地址:http://www.cnblogs.com/Tree-dream/p/7429371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!