# DFA that begins with ‘a’ but does not contain substring ‘aab’

Prerequisite: Introduction to Deterministic Finite Automata
Construct a DFA that accepts a string str starting with input alphabet ‘a’ but does not contain ‘aab’ as a substring over input {a, b}.

Examples:

Input: str = “babba”
Output: Not Accepted
Explanation:

Input: str = “abbaaaaa”
Output: Accepted
Explanation:
The given string start with ‘a’and doesn’t contains “aab” as a substring.

Approach:
The transition table helps to understand how the transition of each state takes place on the input alphabets. In transition table initial state is represented by —> and the final state is represented by *. There are 3 final states, one initial and one dead state.

State Transition table of the given DFA:

 STATE INPUT (a) INPUT (b) —> A B* Q (dead state) B* C* D* C* C* Q (dead state) D* B* D* Q (dead state) Q (dead state) Q (dead State)

Below is the implementation of the above DFA:

 `# Python code for the above DFA ` ` `  `# Function for state A transition ` `def` `stateA(n): ` `     `  `    ``# If at index 0 ` `    ``# 'a' if found then ` `    ``# call stateB function ` `    ``# with passing n[1:] to it ` `    ``if` `(n[``0``]``=``=``'a'``): ` `        ``stateB(n[``1``:]) ` `         `  `    ``# If at index 0 ` `    ``# 'b' if found then ` `    ``# call stateQ function ` `    ``# with passing n to it     ` `    ``else``: ` `        ``stateQ(n) ` ` `  `# Function for state B transition ` `def` `stateB(n): ` `     `  `    ``# Length of string  ` `    ``# become 0 then  ` `    ``# print Accepted ` `    ``if``(``len``(n)``=``=` `0``): ` `        ``print``(``"Accepted"``) ` `    ``else``:     ` `        ``# If at index 0 ` `        ``# 'a' if found then ` `        ``# call stateC function ` `        ``# with passing n[1:] to it ` `        ``if` `(n[``0``]``=``=``'a'``): ` `            ``stateC(n[``1``:]) ` `             `  `        ``# If at index 0 ` `        ``# 'b' if found then ` `        ``# call stateD function ` `        ``# with passing n[1:] to it     ` `        ``else``: ` `            ``stateD(n[``1``:]) ` ` `  `# Function for state C transition ` `def` `stateC(n):    ` `     `  `    ``# Length of string  ` `    ``# become 0 then  ` `    ``# print Accepted ` `    ``if``(``len``(n)``=``=` `0``): ` `        ``print``(``"Accepted"``) ` `         `  `    ``else``:  ` `        ``# If at index 0 ` `        ``# 'a' if found then ` `        ``# call stateC function ` `        ``# with passing n[1:] to it ` `        ``if` `(n[``0``]``=``=``'a'``): ` `            ``stateC(n[``1``:]) ` `             `  `        ``# If at index 0 ` `        ``# 'b' if found then ` `        ``# call stateQ function ` `        ``# with passing n to it     ` `        ``else``: ` `            ``stateQ(n) ` ` `  `# Function for state D transition ` `def` `stateD(n): ` `     `  `    ``# Length of string  ` `    ``# become 0 then  ` `    ``# print Accepted ` `    ``if``(``len``(n)``=``=` `0``): ` `        ``print``(``"Accepted"``) ` `         `  `    ``else``:     ` `        ``# If at index 0 ` `        ``# 'a' if found then ` `        ``# call stateB function ` `        ``# with passing n[1:] to it ` `        ``if` `(n[``0``]``=``=``'a'``): ` `            ``stateB(n[``1``:]) ` `             `  `        ``# If at index 0 ` `        ``# 'b' if found then ` `        ``# call stateD function ` `        ``# with passing n[1:] to it     ` `        ``else``: ` `            ``stateD(n[``1``:]) ` `            `  `# Function for state Q transition ` `def` `stateQ(n): ` `    ``# In dead state  ` `    ``# it shows string  ` `    ``# not accepted ` `    ``print``(``"Not Accepted"``) ` `     `  `# Take string input ` `n ``=``"aaaba"` ` `  `# Call stateA to check the input ` `stateA(n) `

Output:

```Not Accepted
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.