Many changes: 	(1) The function takes in char* substring. When substring is n length, there are n*n literals I have to create. If I can get the pointer of the substring, I can keep using that address to compare instead of constantly allocating space in the C hash table. (I am not sure how C stores string literals, please educate me) 	(2) Use while loop instead of if(){}else if(){}else if{}... Again, don't want to create too much string literals for memcmp(). 	(3) I added j as a temp counter for doing the checking. I think comparing must be done from the best result to the worst result. So while loop does the same thing and perform better.
Many changes:
	(1) The function takes in char* substring. When substring is n length, there are n*n literals I have to create. If I can get the pointer of the substring, I can keep using that address to compare instead of constantly allocating space in the C hash table. (I am not sure how C stores string literals, please educate me)
	(2) Use while loop instead of if(){}else if(){}else if{}... Again, don't want to create too much string literals for memcmp().
	(3) I added j as a temp counter for doing the checking. I think comparing must be done from the best result to the worst result. So while loop does the same thing and perform better.

PS: The string in the printf() can combine instead of having multiple printf()'s. I commit right now so that when I need to adjust something. I can start here. Because I don't want to look through a long string literal to know which part I am changing. The DFA saved a little bit of time, I am not sure if it is better is larger scale(substring is n length).
LumingWu/ContainSubstring,LumingWu/ContainSubstring,LumingWu/ContainSubstring