Given a word $x$ on an alphabet $A^*$ the String Matching Automaton ${\cal D}({x})$ recognizes the language $A^*\{a\}x$. It is defined as follows.
${\cal D}({x}) = (A,Q,q_0,T,F)$ where:
The string matching automaton can be constructed in time $O(m \times |A|)$ by the algorithm SMA.
\begin{algorithmic}
\STATE{$q_0\leftarrow \mbox{NewState}$}
\STATE{$Q\leftarrow \{q_0\}$}
\FOR{each letter $b \in A$}
\STATE{$F\leftarrow F\cup \{ (q_0,b,q_0) \}$}
\ENDFOR
\STATE{$t\leftarrow q_0$}
\FOR{$i\leftarrow 0$ \TO $m-1$}
\STATE{$p\leftarrow \mbox{NewState}$}
\STATE{$Q\leftarrow Q\cup\{p\}$}
\STATE{$r\leftarrow \mbox{Target}(t,x[i])$}
\STATE{$F\leftarrow F \setminus \{ (t,x[i],r) \}$}
\STATE{$F\leftarrow F \cup\{ (t,x[i],p) \}$}
\FOR{each $(r,a,q) \in F$}
\STATE{$F\leftarrow F \cup \{ (p,a,q) \}$}
\ENDFOR
\STATE{$t\leftarrow p$}
\ENDFOR
\STATE{$T\leftarrow \{p\}$}
\RETURN{$(A,Q,q_0,T,F)$}
\end{algorithmic}
\begin{algorithmic}
\IF{$\mbox{there exists } (q,a,p) \in F$}
\RETURN{$p$}
\ELSE
\RETURN{NIL}
\ENDIF
\end{algorithmic}