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

• Last Updated : 09 Aug, 2021

Prerequisite: Introduction to Deterministic Finite Automata
Construct a DFA that accepts 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 the 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:

Below is the DFA diagram:

Below is the implementation of the above DFA:

## C++

 `// C++ code for the above DFA` `#include ` `using` `namespace` `std;` `void` `stateQ(string);` `void` `stateA(string);` `void` `stateB(string);` `void` `stateC(string);` `void` `stateD(string);`   `// Function for state Q ` `// transition` `void` `stateQ(string n)` `{` `  ``// In dead state` `  ``// it shows string` `  ``// not accepted` `  ``cout << (``"Not Accepted"``);` `}`   `// Function for state A ` `// transition` `void` `stateA(string n)` `{` `  ``// If at index 0` `  ``// 'a' if found then` `  ``// call stateB function` `  ``// with passing n[1:] to it` `  ``if` `(n[0] == ``'a'``)` `    ``stateB(n.substr(` `           ``1, n.length() + 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` `void` `stateB(string n)` `{` `  ``// Length of string` `  ``// become 0 then` `  ``// print Accepted` `  ``if` `(n.length() == 0)` `    ``cout << (``"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.substr(` `             ``1, n.length() - 1));`   `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateD function` `    ``// with passing n[1:] to it` `    ``else` `      ``stateD(n.substr(` `             ``1, n.length() - 1));` `  ``}` `}`   `// Function for state C ` `// transition` `void` `stateC(string n)` `{` `  ``// Length of string` `  ``// become 0 then` `  ``// print Accepted` `  ``if` `(n.length() == 0)` `    ``cout << (``"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.substr(` `             ``1, n.length() + 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` `void` `stateD(string n)` `{` `  ``// Length of string` `  ``// become 0 then` `  ``// print Accepted` `  ``if` `(n.length() == 0)` `    ``cout << (``"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.substr(` `             ``1, n.length() + 1));`   `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateD function` `    ``// with passing n[1:] to it` `    ``else` `      ``stateD(n.substr(` `             ``1, n.length() + 1));` `  ``}` `}`   `// Driver code` `int` `main()` `{` `  ``// Take string input` `  ``string n = ``"aaaba"``;`   `  ``// Call stateA to check ` `  ``// the input` `  ``stateA(n);` `}`   `// This code is contributed by Chitranayal`

## Java

 `// Java code for the ` `// above DFA` `import` `java.util.*;`   `class` `GFG{` `     `  `// Function for state ` `// A transition    ` `static` `void` `stateA(String n)` `{` `  `  `  ``// If at index 0` `  ``// 'a' if found then` `  ``// call stateB function` `  ``// with passing n[1:] to it` `  ``if` `(n.charAt(``0``) == ``'a'``)` `  ``{` `    ``stateB(n.substring(``1``));` `  ``}` `  `  `  ``// If at index 0` `  ``// 'b' if found then` `  ``// call stateQ function` `  ``// with passing n to it    ` `  ``else` `  ``{` `    ``stateQ(n);   ` `  ``}` `}` `  `  `// Function for transition ` `// state B         ` `static` `void` `stateB(String n)` `{` `  `  `  ``// length() of String ` `  ``// become 0 then ` `  ``// print Accepted` `  ``if` `(n.length() == ``0``)` `  ``{` `    ``System.out.print(``"Accepted"``);` `  ``}` `  ``else` `  ``{` `    `  `    ``// If at index 0` `    ``// 'a' if found then` `    ``// call stateC function` `    ``// with passing n[1:] to it` `    ``if` `(n.charAt(``0``) == ``'a'``)` `      ``stateC(n.substring(``1``));` ` `  `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateD function` `    ``// with passing n[1:] to it ` `    ``else` `      ``stateD(n.substring(``1``));` `  ``}     ` `} ` ` `  `// Function for transition ` `// state C ` `static` `void` `stateC(String n)` `{` `  `  `  ``// length() of String ` `  ``// become 0 then ` `  ``// print Accepted` `  ``if` `(n.length() == ``0``)` `    ``System.out.print(``"Accepted"``);` `  ``else` `  ``{` `    `  `    ``// If at index 0` `    ``// 'a' if found then` `    ``// call stateC function` `    ``// with passing n[1:] to it` `    ``if` `(n.charAt(``0``) == ``'a'``)` `      ``stateC(n.substring(``1``));` ` `  `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateQ function` `    ``// with passing n to it` `    ``else` `      ``stateQ(n);` `  ``}` `}` ` `  `// Function for transition ` `// state D` `static` `void` `stateD(String n)` `{` `  `  `  ``// length() of String ` `  ``// become 0 then ` `  ``// print Accepted` `  ``if` `(n.length() == ``0``)` `    ``System.out.print(``"Accepted"``);` `  ``else` `  ``{` `    `  `    ``// If at index 0` `    ``// 'a' if found then` `    ``// call stateC function` `    ``// with passing n[1:] to it` `    ``if` `(n.charAt(``0``) == ``'a'``)` `    ``{` `      ``stateB(n.substring(``1``));` `    ``}` ` `  `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateQ function` `    ``// with passing n to it` `    ``else` `    ``{` `      ``stateD(n.substring(``1``));` `    ``}` `  ``}` `}` ` `  `// Function for state Q ` `// transition` `static` `void` `stateQ(String n)` `{` `  `  `  ``// In dead state ` `  ``// it shows String ` `  ``// not accepted` `  ``System.out.print(``"Not Accepted"``);` `}` `     `  `// Driver code` `public` `static` `void` `main(String []args)` `{` `  `  `  ``// Take String input` `  ``String n =``"aaaba"``;` `  `  `  ``// Call stateA to check the input` `  ``stateA(n);` `}` `}`   `// This code is contributed by pratham76`

## Python3

 `# Python3 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)`

## C#

 `// C# code for the ` `// above DFA` `using` `System;` `using` `System.Collections;` `using` `System.Collections.Generic;` `class` `GFG{` `    `  `// Function for state ` `// A transition    ` `static` `void` `stateA(``string` `n)` `{` `  ``// If at index 0` `  ``// 'a' if found then` `  ``// call stateB function` `  ``// with passing n[1:] to it` `  ``if` `(n[0] == ``'a'``)` `  ``{` `    ``stateB(n.Substring(1));` `  ``}`     `  ``// If at index 0` `  ``// 'b' if found then` `  ``// call stateQ function` `  ``// with passing n to it    ` `  ``else` `  ``{` `    ``stateQ(n);   ` `  ``}` `}` ` `  `// Function for transition ` `// state B         ` `static` `void` `stateB(``string` `n)` `{` `  ``// Length of string ` `  ``// become 0 then ` `  ``// print Accepted` `  ``if` `(n.Length == 0)` `  ``{` `    ``Console.Write(``"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.Substring(1));`   `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateD function` `    ``// with passing n[1:] to it ` `    ``else` `      ``stateD(n.Substring(1));` `  ``}     ` `} `   `// Function for transition ` `// state C ` `static` `void` `stateC(``string` `n)` `{` `  ``// Length of string ` `  ``// become 0 then ` `  ``// print Accepted` `  ``if` `(n.Length == 0)` `    ``Console.Write(``"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.Substring(1));`   `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateQ function` `    ``// with passing n to it` `    ``else` `      ``stateQ(n);` `  ``}` `}`   `// Function for transition ` `// state D` `static` `void` `stateD(``string` `n)` `{` `  ``// Length of string ` `  ``// become 0 then ` `  ``// print Accepted` `  ``if` `(n.Length == 0)` `    ``Console.Write(``"Accepted"``);` `  ``else` `  ``{` `    ``// If at index 0` `    ``// 'a' if found then` `    ``// call stateC function` `    ``// with passing n[1:] to it` `    ``if` `(n[0] == ``'a'``)` `    ``{` `      ``stateB(n.Substring(1));` `    ``}`   `    ``// If at index 0` `    ``// 'b' if found then` `    ``// call stateQ function` `    ``// with passing n to it` `    ``else` `    ``{` `      ``stateD(n.Substring(1));` `    ``}`   `  ``}` `}`   `// Function for state Q ` `// transition` `static` `void` `stateQ(``string` `n)` `{` `  ``// In dead state ` `  ``// it shows string ` `  ``// not accepted` `  ``Console.Write(``"Not Accepted"``);` `}` `    `  `// Driver code` `public` `static` `void` `Main(``string` `[]args)` `{` `  ``// Take string input` `  ``string` `n =``"aaaba"``;`   `  ``// Call stateA to check the input` `  ``stateA(n);` `}` `}`   `// This code is contributed by rutvik_56`

## Javascript

 ``

Output:

`Not Accepted`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up
Related Articles