2
2
3
3
import doctest
4
4
5
-
6
5
def build_suffix_array (input_string : str ) -> list [int ]:
7
6
"""
8
7
Build the suffix array for the given string.
@@ -14,7 +13,7 @@ def build_suffix_array(input_string: str) -> list[int]:
14
13
list[int]: The suffix array (a list of starting indices of
15
14
suffixes in sorted order).
16
15
17
- Example :
16
+ Examples :
18
17
>>> build_suffix_array("banana")
19
18
[5, 3, 1, 0, 4, 2]
20
19
"""
@@ -23,7 +22,6 @@ def build_suffix_array(input_string: str) -> list[int]:
23
22
suffix_array = [suffix [1 ] for suffix in suffixes ]
24
23
return suffix_array
25
24
26
-
27
25
def build_lcp_array (input_string : str , suffix_array : list [int ]) -> list [int ]:
28
26
"""
29
27
Build the LCP array for the given string and suffix array.
@@ -35,9 +33,9 @@ def build_lcp_array(input_string: str, suffix_array: list[int]) -> list[int]:
35
33
Returns:
36
34
list[int]: The LCP array.
37
35
38
- Example :
39
- >>> suffix_arr = build_suffix_array("banana")
40
- >>> build_lcp_array("banana", suffix_arr )
36
+ Examples :
37
+ >>> suffix_array = build_suffix_array("banana")
38
+ >>> build_lcp_array("banana", suffix_array )
41
39
[0, 1, 3, 0, 0, 2]
42
40
"""
43
41
n = len (input_string )
@@ -53,30 +51,29 @@ def build_lcp_array(input_string: str, suffix_array: list[int]) -> list[int]:
53
51
for i in range (n ):
54
52
if rank [i ] > 0 :
55
53
j = suffix_array [rank [i ] - 1 ]
56
- while (
57
- (i + h < n )
58
- and (j + h < n )
59
- and (input_string [i + h ] == input_string [j + h ])
60
- ):
54
+ while (i + h < n ) and (j + h < n ) and (input_string [i + h ] == input_string [j + h ]):
61
55
h += 1
62
56
lcp [rank [i ]] = h
63
57
if h > 0 :
64
58
h -= 1 # Decrease h for the next suffix
65
59
return lcp
66
60
67
-
68
61
# Example usage
69
62
if __name__ == "__main__" :
70
- test_string = "banana"
71
- suffix_array = build_suffix_array (test_string )
72
- lcp_array = build_lcp_array (test_string , suffix_array )
63
+ s = "banana"
64
+ suffix_array = build_suffix_array (s )
65
+ lcp_array = build_lcp_array (s , suffix_array )
73
66
74
67
print ("Suffix Array:" )
75
68
for i in range (len (suffix_array )):
76
- print (f"{ suffix_array [i ]} : { test_string [suffix_array [i ]:]} " )
69
+ print (f"{ suffix_array [i ]} : { s [suffix_array [i ]:]} " )
77
70
78
71
print ("\n LCP Array:" )
79
72
for i in range (1 , len (lcp_array )):
80
- print (
81
- f"LCP between { test_string [suffix_array [i - 1 ]:]} and { test_string [suffix_array [i ]]} : { lcp_array [i ]} "
82
- )
73
+ lcp_info = (f"LCP between { s [suffix_array [i - 1 ]:]} and "
74
+ f"{ s [suffix_array [i ]]} : { lcp_array [i ]} " )
75
+ print (lcp_info )
76
+
77
+ # Run doctests
78
+ if __name__ == "__main__" :
79
+ doctest .testmod ()
0 commit comments