It looks ok. But language recognizers are hard to revise.
It would be good if more people could have a look at it.
There is a systematic way for reducing FSM states. I think the method is to look if you go to the same state with the same input from more than one state. If so, you can merge those two starting states. Under this scope, states D and G can be merged.
You should look up some Discrete Mathematics books. I know that Liu's Elements of Discrete Mathematics contains such theory.