Transition Table

STATES INPUT (a) INPUT (b)
—> A (initial state) AB A
AB ABC* (final state) AC* (final state)
AC* (final state) AB A
ABC* (final state) ABC* (final state) AC* (final state)

DFA of a string in which 2nd symbol from RHS is ‘a’

Draw deterministic finite automata (DFA) of the language containing the set of all strings over {a, b} in which 2nd symbol from RHS is ‘a’. The strings in which 2nd last symbol is “a” are:

aa, ab, aab, aaa, aabbaa, bbbab etc

Similar Reads

Input/Output

INPUT : baba OUTPUT: NOT ACCEPTED INPUT: aaab OUTPUT: ACCEPTED...

Transition Table

STATES INPUT (a) INPUT (b) —> A (initial state) AB A AB ABC* (final state) AC* (final state) AC* (final state) AB A ABC* (final state) ABC* (final state) AC* (final state)...

C++ & Python Implementation

C++ #include using namespace std;   // Forward declarations of state functions void stateA(string n); void stateAB(string n); void stateABC(string n); void stateAC(string n);   // State function for state A void stateA(string n) {     // Check if the input string is empty     if (n.length() == 0) {         cout << "string not accepted" << endl;     } else {         // Check the first character of the input         if (n[0] == 'a') {             stateAB(n.substr(1)); // Call stateAB for remaining substring         } else if (n[0] == 'b') {             stateA(n.substr(1)); // Call stateA for remaining substring         }     } }   // State function for state AB void stateAB(string n) {     // Check if the input string is empty     if (n.length() == 0) {         cout << "string not accepted" << endl;     } else {         // Check the first character of the input         if (n[0] == 'a') {             stateABC(n.substr(1)); // Call stateABC for remaining substring         } else if (n[0] == 'b') {             stateAC(n.substr(1)); // Call stateAC for remaining substring         }     } }   // State function for state ABC void stateABC(string n) {     // Check if the input string is empty     if (n.length() == 0) {         cout << "string accepted" << endl;     } else {         // Check the first character of the input         if (n[0] == 'a') {             stateABC(n.substr(1)); // Call stateABC for remaining substring         } else if (n[0] == 'b') {             stateAC(n.substr(1)); // Call stateAC for remaining substring         }     } }   // State function for state AC void stateAC(string n) {     // Check if the input string is empty     if (n.length() == 0) {         cout << "string accepted" << endl;     } else {         // Check the first character of the input         if (n[0] == 'a') {             stateAB(n.substr(1)); // Call stateAB for remaining substring         } else if (n[0] == 'b') {             stateA(n.substr(1)); // Call stateA for remaining substring         }     } }   int main() {     string n;     cin >> n; // Take input string from user     stateA(n); // Call stateA to check the input     return 0; }   // This Code is Contributed by Shivam Tiwari Java import java.util.Scanner;   public class StateMachine {       // Forward declarations of state functions     static void stateA(String n) {         // Check if the input string is empty         if (n.length() == 0) {             System.out.println("string not accepted");         } else {             // Check the first character of the input             if (n.charAt(0) == 'a') {                 stateAB(n.substring(1)); // Call stateAB for the remaining substring             } else if (n.charAt(0) == 'b') {                 stateA(n.substring(1)); // Call stateA for the remaining substring             }         }     }       static void stateAB(String n) {         // Check if the input string is empty         if (n.length() == 0) {             System.out.println("string not accepted");         } else {             // Check the first character of the input             if (n.charAt(0) == 'a') {                 stateABC(n.substring(1)); // Call stateABC for the remaining substring             } else if (n.charAt(0) == 'b') {                 stateAC(n.substring(1)); // Call stateAC for the remaining substring             }         }     }       static void stateABC(String n) {         // Check if the input string is empty         if (n.length() == 0) {             System.out.println("string accepted");         } else {             // Check the first character of the input             if (n.charAt(0) == 'a') {                 stateABC(n.substring(1)); // Call stateABC for the remaining substring             } else if (n.charAt(0) == 'b') {                 stateAC(n.substring(1)); // Call stateAC for the remaining substring             }         }     }       static void stateAC(String n) {         // Check if the input string is empty         if (n.length() == 0) {             System.out.println("string accepted");         } else {             // Check the first character of the input             if (n.charAt(0) == 'a') {                 stateAB(n.substring(1)); // Call stateAB for the remaining substring             } else if (n.charAt(0) == 'b') {                 stateA(n.substring(1)); // Call stateA for the remaining substring             }         }     }       public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         System.out.print("Enter the string: ");         if (scanner.hasNext()) {             String n = scanner.next(); // Take input string from the user             stateA(n); // Call stateA to check the input         } else {             System.out.println("No input provided.");         }         scanner.close();     } }   // This Code is Contributed by Shivam Tiwari Python3 def stateA(n):     #if length found 0     #print not accepted     if (len(n)==0):         print("string not accepted")     else:                      #if at index 0         #'a' found call         #function stateAB         if(n[0]=='a'):             stateAB(n[1:])                       #else if 'b' found         #call function A.            elif (n[0]=='b'):             stateA(n[1:])           def stateAB(n):     #if length found 0     #print not accepted     if (len(n)==0):         print("string not accepted")     else:                   #if at index 0         #'a' found call         #function stateABC         if(n[0]=='a'):             stateABC(n[1:])                       #else if 'b' found         #call function AC.             elif (n[0]=='b'):             stateAC(n[1:])           def stateABC(n):     #if length found 0     #print accepted     if (len(n)==0):         print("string accepted")     else:                   #if at index 0         #'a' found call         #function stateABC         if(n[0]=='a'):             stateABC(n[1:])                       #else if 'b' found         #call function AC.             elif (n[0]=='b'):             stateAC(n[1:])           def stateAC(n):     #if length found 0     #print accepted     if (len(n)==0):         print("string accepted")     else:         #if at index 0         #'a' found call         #function stateAB         if(n[0]=='a'):             stateAB(n[1:])                       #else if 'b' found         #call function A.             elif (n[0]=='b'):             stateA(n[1:])              #take string input n=input()   #call stateA #to check the input stateA(n) C# using System;   class StateMachine {     // Forward declarations of state functions     static void StateA(string n);     static void StateAB(string n);     static void StateABC(string n);     static void StateAC(string n);       // State function for state A     static void StateA(string n)     {         // Check if the input string is null or empty         if (string.IsNullOrEmpty(n))         {             Console.WriteLine("Invalid input: string not accepted");             return;         }           // Check the first character of the input         if (n[0] == 'a')         {             StateAB(n.Substring(1)); // Call StateAB for the remaining substring         }         else if (n[0] == 'b')         {             StateA(n.Substring(1)); // Call StateA for the remaining substring         }     }       // State function for state AB     static void StateAB(string n)     {         // Check if the input string is null or empty         if (string.IsNullOrEmpty(n))         {             Console.WriteLine("Invalid input: string not accepted");             return;         }           // Check the first character of the input         if (n[0] == 'a')         {             StateABC(n.Substring(1)); // Call StateABC for the remaining substring         }         else if (n[0] == 'b')         {             StateAC(n.Substring(1)); // Call StateAC for the remaining substring         }     }       // State function for state ABC     static void StateABC(string n)     {         // Check if the input string is null or empty         if (string.IsNullOrEmpty(n))         {             Console.WriteLine("string accepted");             return;         }           // Check the first character of the input         if (n[0] == 'a')         {             StateABC(n.Substring(1)); // Call StateABC for the remaining substring         }         else if (n[0] == 'b')         {             StateAC(n.Substring(1)); // Call StateAC for the remaining substring         }     }       // State function for state AC     static void StateAC(string n)     {         // Check if the input string is null or empty         if (string.IsNullOrEmpty(n))         {             Console.WriteLine("string accepted");             return;         }           // Check the first character of the input         if (n[0] == 'a')         {             StateAB(n.Substring(1)); // Call StateAB for the remaining substring         }         else if (n[0] == 'b')         {             StateA(n.Substring(1)); // Call StateA for the remaining substring         }     }       static void Main()     {         Console.Write("Enter a string: ");         string n = Console.ReadLine(); // Take input string from the user         StateA(n); // Call StateA to check the input     } }   // This Code is Contributed by Shivam Tiwari Javascript // Forward declarations of state functions function stateA(n) {     // Check if the input string is empty     if (n.length === 0) {         console.log("String not accepted");     } else {         // Check the first character of the input         if (n[0] === 'a') {             stateAB(n.substr(1)); // Call stateAB for remaining substring         } else if (n[0] === 'b') {             stateA(n.substr(1)); // Call stateA for remaining substring         }     } }   function stateAB(n) {     // Check if the input string is empty     if (n.length === 0) {         console.log("String not accepted");     } else {         // Check the first character of the input         if (n[0] === 'a') {             stateABC(n.substr(1)); // Call stateABC for remaining substring         } else if (n[0] === 'b') {             stateAC(n.substr(1)); // Call stateAC for remaining substring         }     } }   function stateABC(n) {     // Check if the input string is empty     if (n.length === 0) {         console.log("String accepted");     } else {         // Check the first character of the input         if (n[0] === 'a') {             stateABC(n.substr(1)); // Call stateABC for remaining substring         } else if (n[0] === 'b') {             stateAC(n.substr(1)); // Call stateAC for remaining substring         }     } }   function stateAC(n) {     // Check if the input string is empty     if (n.length === 0) {         console.log("String accepted");     } else {         // Check the first character of the input         if (n[0] === 'a') {             stateAB(n.substr(1)); // Call stateAB for remaining substring         } else if (n[0] === 'b') {             stateA(n.substr(1)); // Call stateA for remaining substring         }     } }   // Driver code let inputString = prompt("Enter a string: "); // Take input string from the user stateA(inputString); // Call stateA to check the input //This code is contributed by Monu....

Output

...

Frequently Asked Questions

...

Conclusion

...