▁Pre processing ▁▁▁▁ ▁R ▁= ▁bad _ character _ table ( P ) ▁▁▁▁ ▁L ▁= ▁good _ su ff ix _ table ( P ) ▁▁▁▁ ▁F ▁= ▁full _ shift _ table ( P ) ▁▁▁▁▁ ▁k ▁= ▁len ( P ) ▁- ▁ 1 ▁▁▁▁▁ ▁# ▁Re pres ents ▁alignment ▁of ▁end ▁of ▁P ▁relative ▁to ▁T ▁▁▁▁ ▁previous _ k ▁= ▁- 1 ▁▁▁▁ ▁# ▁Re pres ents ▁alignment ▁in ▁previous ▁phase ▁( G al il ' s ▁rule ) ▁▁▁▁ ▁while ▁k ▁< ▁len ( T ): ▁▁▁▁▁▁▁▁ ▁i ▁= ▁len ( P ) ▁- ▁ 1 ▁ ▁# ▁Character ▁to ▁compare ▁in ▁P ▁▁▁▁▁▁▁▁ ▁h ▁= ▁k ▁▁▁▁▁▁▁▁▁▁ ▁# ▁Character ▁to ▁compare ▁in ▁T ▁▁▁▁▁▁▁▁ ▁while ▁i ▁>= ▁ 0 ▁and ▁h ▁> ▁previous _ k ▁and ▁P [ i ] ▁== ▁T [ h ]: ▁▁ ▁# ▁Match es ▁starting ▁from ▁end ▁of ▁P ▁▁▁▁▁▁▁▁▁▁▁▁ ▁i ▁-= ▁ 1 ▁▁▁▁▁▁▁▁▁▁▁▁ ▁h ▁-= ▁ 1 ▁▁▁▁▁▁▁▁ ▁if ▁i ▁== ▁- 1 ▁or ▁h ▁== ▁previous _ k : ▁ ▁# ▁Match ▁has ▁been ▁found ▁( G al il ' s ▁rule ) ▁▁▁▁▁▁▁▁▁▁▁▁ ▁matches . append ( k ▁- ▁len ( P ) ▁+ ▁ 1 ) ▁▁▁▁▁▁▁▁▁▁▁▁ ▁k ▁+= ▁len ( P )- F [ 1 ] ▁if ▁len ( P ) ▁> ▁ 1 ▁else ▁ 1 ▁▁▁▁▁▁▁▁ ▁else : ▁▁ ▁# ▁No ▁match , ▁shift ▁by ▁max ▁of ▁bad ▁character ▁and ▁good ▁suffix ▁rules ▁▁▁▁▁▁▁▁▁▁▁▁ ▁char _ shift ▁= ▁i ▁- ▁R [ al