# 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:

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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 == ``'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 == ``'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 == ``'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 == ``'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 == ``'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 == ``'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 == ``'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 == ``'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