poj(2406)(kmp)
2016-01-15 00:00
197 查看
View Code
1
//
kmp算法
2
#include
"
iostream
"
3
using
namespace
std;
4
char
s[
10000001
];
5
int
next[
100001
];
6
int
L;
7
int
i,j;
8
void
Index_kmp()
9
{
10
while
(i
<
L)
//
kmp核心算法
11
{
12
if
(j
==
0
||
s[i]
==
s[j])
//
继续比较后继字符
13
{
++
i;
++
j; next[i]
=
j; }
14
else
15
j
=
next[j];
//
串向右移动
16
}
17
}
18
int
main()
19
{
20
while
(
1
)
21
{
22
scanf(
"
%s
"
,s);
23
if
(s[
0
]
==
'
.
'
)
break
;
24
L
=
strlen(s);
25
i
=
1
; j
=
0
; next[
0
]
=
0
;
26
27
Index_kmp();
28
if
(L
%
(L
-
next[L])
==
0
) printf(
"
%d\n
"
,L
/
(L
-
next[L]));
//
形成周期性
29
else
printf(
"
1\n
"
);
30
}
31
return
0
;
32
}