3
3
4
4
# Rabin-Karp Algorithm
5
5
class Solution (object ):
6
- def __init__ (self ):
7
- self .__N = 1000
8
- self .__MOD = 10 ** 9 + 7
9
- self .__D = 26
10
- self .__pow = [1 ]* (self .__N + 1 )
11
- for i in xrange (1 , len (self .__pow )):
12
- self .__pow [i ] = self .__pow [i - 1 ]* self .__D % self .__MOD
13
-
14
6
def longestDecomposition (self , text ):
15
7
"""
16
8
:type text: str
@@ -22,13 +14,16 @@ def compare(text, l, s1, s2):
22
14
return False
23
15
return True
24
16
17
+ MOD = 10 ** 9 + 7
18
+ D = 26
25
19
result = 0
26
- l , left , right = 0 , 0 , 0
20
+ l , left , right , pow_D = 0 , 0 , 0 , 1
27
21
for i in xrange (len (text )):
22
+ left = (D * left + (ord (text [i ])- ord ('a' ))) % MOD
23
+ right = (pow_D * (ord (text [- 1 - i ])- ord ('a' )) + right ) % MOD
28
24
l += 1
29
- left = (self .__pow [1 ]* left + (ord (text [i ])- ord ('a' ))) % self .__MOD
30
- right = (self .__pow [l - 1 ]* (ord (text [- 1 - i ])- ord ('a' )) + right ) % self .__MOD
25
+ pow_D = (pow_D * D ) % MOD
31
26
if left == right and compare (text , l , i - l + 1 , len (text )- 1 - i ):
32
27
result += 1
33
- l , left , right = 0 , 0 , 0
28
+ l , left , right , pow_D = 0 , 0 , 0 , 1
34
29
return result
0 commit comments