# Build a DFA to accept Binary strings that starts or ends with “01”

Given a binary string str, the task is to build a DFA that accepts the string if the string either starts with “01” or ends with “01”.

Input: str = “010000”
Output: Accepted
Explanation:
The given string starts with “01”.

Input: str = “1100111”
Output: Not Accepted
Explanation:
The given string neither starts with nor ends with “01”.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

DFA or Deterministic Finite Automata is a finite state machine which accepts a string(under some specific condition) if it reaches a final state, otherwise rejects it.

In DFA, there is no concept of memory, therefore we have to check the string character by character, beginning with the 0th character. The input set of characters for the problem is {0, 1}. For a DFA to be valid, there must a transition rule defined for each symbol of the input set at every state to a valid state. Therefore, the following steps are followed to design the DFA:

• In this case, the strings that start with 01 or end with 01 or both start with 01 and end with 01 should be acceptable.
• Make a initial state and transit its input alphabets, i.e, 0 and 1 to two different states.
• Check for acceptance of string after each transition to ignore errors.
• First make DfA for minimum length string then go ahead step by step.
• Define Final State(s) according to the acceptance of string.

Step by Step Approach to design a DFA:

Transition table and Transition rules of the above DFA:

State Input (0) Input (1)
—>A B D
B E C
C* C C
D E D
E E F
F* E D Below is the implementation of the above approach:

## C++

 `// C++ program to check if a string  ` `// either starts or ends with 01 ` `#include ` `using` `namespace` `std; ` ` `  `void` `stateA(string); ` `void` `stateB(string); ` `void` `stateC(string); ` `void` `stateD(string);  ` `void` `stateE(string); ` `void` `stateF(string); ` ` `  `// Function for transition  ` `// state A ` `void` `checkstateA(string n) ` `{ ` `     `  `    ``// State transition to  ` `    ``// B if the character is  ` `    ``// 0 ` `    ``if``(n == ``'0'``) ` `       ``stateB(n.substr(1)); ` `        `  `    ``// State transition to  ` `    ``// D if the character is  ` `    ``// 1 ` `    ``else` `       ``stateD(n.substr(1)); ` `} ` ` `  `// Function for transition  ` `// state B          ` `void` `stateB(string n) ` `{ ` `     `  `    ``// Check if the string has  ` `    ``// ended ` `    ``if` `(n.length() == 0) ` `        ``cout << ``"string not accepted"``; ` `    ``else` `    ``{ ` `         `  `        ``// State transition to C ` `        ``// if the character is 1 ` `        ``if``(n == ``'1'``) ` `            ``stateC(n.substr(1)); ` ` `  `        ``// State transition to D ` `        ``// if the character is 0 ` `        ``else` `            ``stateD(n.substr(1)); ` `    ``}      ` `}  ` ` `  `// Function for transition  ` `// state C  ` `void` `stateC(string n) ` `{ ` `    ``cout << ``"String accepted"``; ` `} ` ` `  `// Function for transition  ` `// state D ` `void` `stateD(string n) ` `{ ` `    ``if` `(n.length() == 0) ` `        ``cout << ``"string not accepted"``; ` `    ``else` `    ``{ ` `         `  `        ``// State transition to D ` `        ``// if the character is 1 ` `        ``if` `(n == ``'1'``) ` `            ``stateD(n.substr(1)); ` ` `  `        ``// State transition to E ` `        ``// if the character is 0 ` `        ``else` `            ``stateE(n.substr(1)); ` `    ``} ` `} ` ` `  `// Function for transition  ` `// state E ` `void` `stateE(string n) ` `{ ` `    ``if` `(n.length() == 0) ` `        ``cout << ``"string not accepted"``; ` `    ``else` `    ``{ ` `         `  `        ``// State transition to E ` `        ``// if the character is 0  ` `        ``if``(n == ``'0'``) ` `            ``stateE(n.substr(1)); ` ` `  `        ``// State transition to F ` `        ``// if the character is 1 ` `        ``else` `            ``stateF(n.substr(1)); ` `    ``} ` `} ` ` `  `// Function for transition  ` `// state F ` `void` `stateF(string n) ` `{ ` `    ``if``(n.length() == 0) ` `        ``cout << ``"string accepred"``; ` `    ``else` `    ``{ ` `         `  `        ``// State transition to D ` `        ``// if the character is 1 ` `        ``if``(n == ``'1'``) ` `            ``stateD(n.substr(1)); ` ` `  `        ``// State transition to E ` `        ``// if the character is 0 ` `        ``else` `            ``stateE(n.substr(1)); ` `    ``} ` `}  ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string n = ``"0100101"``; ` `     `  `    ``checkstateA(n); ` `    ``return` `0; ` `} ` ` `  `// This code is contributed by chitranayal `

## Python3

 `# Python3 program to check if  ` `# a string either starts or ` `# ends with 01 ` ` `  `# Function for transition  ` `# state A ` `def` `checkstateA(n): ` ` `  `    ``# State transition to  ` `    ``# B if the character is  ` `    ``# 0 ` `    ``if``(n[``0``]``=``=``'0'``): ` `        ``stateB(n[``1``:]) ` ` `  `    ``# State transition to  ` `    ``# D if the character is  ` `    ``# 1 ` `    ``else``: ` `        ``stateD(n[``1``:]) ` ` `  `# Function for transition  ` `# state B          ` `def` `stateB(n): ` ` `  `    ``# Check if the string has  ` `    ``# ended ` `    ``if` `(``len``(n)``=``=` `0``): ` `        ``print``(``"string not accepted"``) ` `    ``else``:     ` `     `  `        ``# State transition to C ` `        ``# if the character is 1 ` `        ``if``(n[``0``]``=``=``'1'``): ` `            ``stateC(n[``1``:]) ` ` `  `        ``# State transition to D ` `        ``# if the character is 0 ` `        ``else``: ` `            ``stateD(n[``1``:]) ` `          `  `# Function for transition  ` `# state C     ` `def` `stateC(n): ` `    ``print``(``"String accepted"``) ` `  `  `# Function for transition  ` `# state D ` `def` `stateD(n): ` `    ``if` `(``len``(n)``=``=` `0``): ` `        ``print``(``"string not accepted"``) ` `    ``else``:     ` ` `  `        ``# State transition to D ` `        ``# if the character is 1 ` `        ``if` `(n[``0``]``=``=``'1'``): ` `            ``stateD(n[``1``:]) ` ` `  `        ``# State transition to E ` `        ``# if the character is 0 ` `        ``else``: ` `            ``stateE(n[``1``:]) ` `  `  `# Function for transition  ` `# state E ` `def` `stateE(n): ` `    ``if` `(``len``(n)``=``=` `0``): ` `        ``print``(``"string not accepted"``) ` `    ``else``:    ` ` `  `        ``# State transition to E ` `        ``# if the character is 0  ` `        ``if``(n[``0``]``=``=``'0'``): ` `            ``stateE(n[``1``:]) ` ` `  `        ``# State transition to F ` `        ``# if the character is 1 ` `        ``else``: ` `            ``stateF(n[``1``:]) ` `  `  `# Function for transition  ` `# state F ` `def` `stateF(n): ` `    ``if``(``len``(n)``=``=` `0``): ` `        ``print``(``"string accepred"``) ` `    ``else``: ` ` `  `        ``# State transition to D ` `        ``# if the character is 1 ` `        ``if``(n[``0``]``=``=``'1'``): ` `            ``stateD(n[``1``:]) ` ` `  `        ``# State transition to E ` `        ``# if the character is 0 ` `        ``else``: ` `            ``stateE(n[``1``:]) ` `      `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``n ``=` `"0100101"` `    ``checkstateA(n) `

Output:

```String 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.

Improved By : chitranayal

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.