11from collections import deque
2+ from typing import Dict , List , Union
23
34
45class Automaton :
5- def __init__ (self , keywords ):
6+ def __init__ (self , keywords : List [ str ] ):
67 self .adlist = list ()
78 self .adlist .append (
89 {"value" : "" , "next_states" : [], "fail_state" : 0 , "output" : []}
@@ -12,13 +13,13 @@ def __init__(self, keywords):
1213 self .add_keyword (keyword )
1314 self .set_fail_transitions ()
1415
15- def find_next_state (self , current_state , char ) :
16+ def find_next_state (self , current_state : int , char : str ) -> Union [ int , None ] :
1617 for state in self .adlist [current_state ]["next_states" ]:
1718 if char == self .adlist [state ]["value" ]:
1819 return state
1920 return None
2021
21- def add_keyword (self , keyword ) :
22+ def add_keyword (self , keyword : str ) -> None :
2223 current_state = 0
2324 for character in keyword :
2425 if self .find_next_state (current_state , character ):
@@ -36,7 +37,7 @@ def add_keyword(self, keyword):
3637 current_state = len (self .adlist ) - 1
3738 self .adlist [current_state ]["output" ].append (keyword )
3839
39- def set_fail_transitions (self ):
40+ def set_fail_transitions (self ) -> None :
4041 q = deque ()
4142 for node in self .adlist [0 ]["next_states" ]:
4243 q .append (node )
@@ -61,7 +62,7 @@ def set_fail_transitions(self):
6162 + self .adlist [self .adlist [child ]["fail_state" ]]["output" ]
6263 )
6364
64- def search_in (self , string ) :
65+ def search_in (self , string : str ) -> Dict [ str , List [ int ]] :
6566 """
6667 >>> A = Automaton(["what", "hat", "ver", "er"])
6768 >>> A.search_in("whatever, err ... , wherever")
0 commit comments