初期状態から状態1、状態0、状態2、状態3と進みます。
Chart[0,0]からChart[0,1]になることが重要です。
while文はIdxを増やすものです。いくらwhileしてもここではStateは増加しません。
つまりChart[Idx,State]だとChart[0,1]になりません。したがってaはChart[State,Idx]となります。
bについてですが、cntは文字列の何番目かを示すものです。最終的にStateは状態の3となっていることを確認して終了しますので、文字の順番と比較しても意味がありません。
Str[Cnt]はただの文字でこれも論外。
なので、bはIdxとなります。