 Open in App
Not now

# DFA for Strings not ending with “THE”

• Difficulty Level : Medium
• Last Updated : 20 Dec, 2022

Problem – Accept Strings that not ending with substring “THE”. Check if a given string is ending with “the” or not. The different forms of “the” which are avoided in the end of the string are:

`"THE", "ThE", "THe", "tHE", "thE", "The", "tHe" and "the"`

All those strings that are ending with any of the above mentioned forms of “the” are not accepted.

Deterministic finite automata (DFA) of strings that not ending with “THE” –
The initial and starting state in this dfa is Qo Approach used in the program –
In this program, consider the 4 states to be 0, 1, 2 and 3. Now let us take a variable named DFA which will be initially 0. Whenever any transition takes place, it will update the value of DFA with the number associated with new state.

Example : If a transition occurs from state 0 to state 1 then the value of DFA will be updated to 1. If a transition occurs from state 2 to state 3 then the value of dfa will be updated to 3. In this way, apply this algorithm on entire string and if in the end, then reach state 0, 1 or 2 then our string will be accepted otherwise not.

```Input : XYzabCthe
Output : NOT ACCEPTED

Input :  Themaliktth
Output :  ACCEPTED```

## C++

 `// C++ program to implement DFS that accepts` `// all string that do not end with "THE"` `#include ` `using` `namespace` `std;`   `// dfa tells the number associated` `// with the present state` `int` `dfa = 0;`   `// This function is for` `// the starting state (zeroth) of DFA` `void` `start(``char` `c)` `{` `    `  `    ``// On receiving 'T' or 't' goto ` `    ``// first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `}`   `// This function is for the first state of DFA` `void` `state1(``char` `c)` `{` `    `  `    ``// On receiving 'T' or 't' goto ` `    ``// first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;`   `    ``// On receiving 'H' or 'h'` `    ``// goto second state (2)` `    ``else` `if` `(c == ``'h'` `|| c == ``'H'``)` `        ``dfa = 2;`   `    ``// Else goto starting state (0)` `    ``else` `        ``dfa = 0;` `}`   `// This function is for the second state of DFA` `void` `state2(``char` `c)` `{` `    `  `    ``// On receiving 'E' or 'e' goto third state (3)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'e'` `|| c == ``'E'``)` `        ``dfa = 3;` `    ``else` `if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `      ``else` `        ``dfa = 0;` `}`   `// This function is for the third state of DFA` `void` `state3(``char` `c)` `{` `    `  `    ``// On receiving 'T' or 't' goto first state (1)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `    ``else` `        ``dfa = 0;` `}`   `bool` `isAccepted(string str)` `{` `    `  `    ``// Store length of string` `    ``int` `len = str.length();`   `    ``for``(``int` `i = 0; i < len; i++)` `    ``{` `        ``if` `(dfa == 0)` `            ``start(str[i]);`   `        ``else` `if` `(dfa == 1)` `            ``state1(str[i]);`   `        ``else` `if` `(dfa == 2)` `            ``state2(str[i]);`   `        ``else` `            ``state3(str[i]);        ` `    ``}` `    ``return` `(dfa != 3);` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"forTHEgeeks"``;` `    ``if` `(isAccepted(str) == ``true``)` `        ``cout << ``"ACCEPTED\n"``;` `    ``else` `        ``cout << ``"NOT ACCEPTED\n"``;` `        `  `    ``return` `0;` `}`   `// This code is contributed by ShubhamSingh10`

## C

 `// C program to implement DFS that accepts` `// all string that do not end with "THE"` `#include ` `#include `   `// dfa tells the number associated` `// with the present state` `int` `dfa = 0;`   `// This function is for` `// the starting state (zeroth) of DFA` `void` `start(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `}`   `// This function is for the first state of DFA` `void` `state1(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;`   `    ``// On receiving 'H' or 'h' goto second state (2)` `    ``else` `if` `(c == ``'h'` `|| c == ``'H'``)` `        ``dfa = 2;`   `    ``// else goto starting state (0)` `    ``else` `        ``dfa = 0;` `}`   `// This function is for the second state of DFA` `void` `state2(``char` `c)` `{` `    ``// On receiving 'E' or 'e' goto third state (3)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'e'` `|| c == ``'E'``)` `        ``dfa = 3;` `    ``else` `if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `      ``else` `        ``dfa = 0;` `}`   `// This function is for the third state of DFA` `void` `state3(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `    ``else` `        ``dfa = 0;` `}`   `bool` `isAccepted(``char` `str[])` `{` `    ``// store length of string` `    ``int` `len = ``strlen``(str);`   `    ``for` `(``int` `i=0; i < len; i++) {` `            ``if` `(dfa == 0)` `                ``start(str[i]);`   `            ``else` `if` `(dfa == 1)` `                ``state1(str[i]);`   `            ``else` `if` `(dfa == 2)` `                ``state2(str[i]);`   `            ``else` `                ``state3(str[i]);        ` `    ``}`   `    ``return` `(dfa != 3);` `}`   `// driver code` `int` `main()` `{` `    ``char` `str[] = ``"forTHEgeeks"``;` `    ``if` `(isAccepted(str) == ``true``)` `        ``printf``(``"ACCEPTED\n"``);` `    ``else` `        ``printf``(``"NOT ACCEPTED\n"``);` `    ``return` `0;` `}`

## Java

 `// Java program to implement DFS that accepts` `// all string that do not end with "THE"` `import` `java.util.*;`   `class` `GFG ` `{`   `// dfa tells the number associated` `// with the present state` `static` `int` `dfa = ``0``;`   `// This function is for` `// the starting state (zeroth) of DFA` `static` `void` `start(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = ``1``;` `}`   `// This function is for the first state of DFA` `static` `void` `state1(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = ``1``;`   `    ``// On receiving 'H' or 'h' goto second state (2)` `    ``else` `if` `(c == ``'h'` `|| c == ``'H'``)` `        ``dfa = ``2``;`   `    ``// else goto starting state (0)` `    ``else` `        ``dfa = ``0``;` `}`   `// This function is for the second state of DFA` `static` `void` `state2(``char` `c)` `{` `    ``// On receiving 'E' or 'e' goto third state (3)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'e'` `|| c == ``'E'``)` `        ``dfa = ``3``;` `    ``else` `        ``dfa = ``0``;` `}`   `// This function is for the third state of DFA` `static` `void` `state3(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = ``1``;` `    ``else` `        ``dfa = ``0``;` `}`   `static` `boolean` `isAccepted(``char` `str[])` `{` `    ``// store length of string` `    ``int` `len = str.length;`   `    ``for` `(``int` `i=``0``; i < len; i++) ` `    ``{` `            ``if` `(dfa == ``0``)` `                ``start(str[i]);`   `            ``else` `if` `(dfa == ``1``)` `                ``state1(str[i]);`   `            ``else` `if` `(dfa == ``2``)` `                ``state2(str[i]);`   `            ``else` `                ``state3(str[i]);     ` `    ``}`   `    ``return` `(dfa != ``3``);` `}`   `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``char` `str[] = ``"forTHEgeeks"``.toCharArray();` `    ``if` `(isAccepted(str) == ``true``)` `        ``System.out.println(``"ACCEPTED\n"``);` `    ``else` `        ``System.out.println(``"NOT ACCEPTED\n"``);` `}` `}`   `/* This code is contributed by PrinciRaj1992 */`

## Python3

 `# Python3 program to implement DFS that accepts ` `# all string that do not end with "THE" `   `# This function is for the starting` `# state (zeroth) of DFA ` `def` `start(c):` `    `  `    ``# On receiving 'T' or 't' goto ` `    ``# first state (1) ` `    ``if` `(c ``=``=` `'t'` `or` `c ``=``=` `'T'``):` `        ``dfa``=``1`   `# This function is for the first state of DFA ` `def` `state1(c): ` `    `  `    ``# On receiving 'T' or 't' goto first state (1) ` `    ``if` `(c ``=``=` `'t'` `or` `c ``=``=` `'T'``):` `        ``dfa ``=` `1`   `    ``# On receiving 'H' or 'h' goto second state (2) ` `    ``elif` `(c ``=``=` `'h'` `or` `c ``=``=` `'H'``):` `        ``dfa ``=` `2`   `    ``# else goto starting state (0) ` `    ``else``:` `        ``dfa ``=` `0`   `# This function is for the second state of DFA ` `def` `state2(c):` `    `  `    ``# On receiving 'E' or 'e' goto third ` `    ``# state (3) else goto starting state (0) ` `    ``if` `(c ``=``=` `'e'` `or` `c ``=``=` `'E'``):` `        ``dfa ``=` `3` `    ``else``:` `        ``dfa ``=` `0` `        `  `# This function is for the third state of DFA ` `def` `state3(c):` `    `  `    ``# On receiving 'T' or 't' goto first ` `    ``# state (1) else goto starting state (0) ` `    ``if` `(c ``=``=` `'t'` `or` `c ``=``=` `'T'``):` `        ``dfa ``=` `1` `    ``else``:` `        ``dfa ``=` `0`   `def` `isAccepted(string):` `    `  `    ``# store length of string` `    ``length ``=` `len``(string) `   `    ``for` `i ``in` `range``(length):` `        ``if` `(dfa ``=``=` `0``):` `            ``start(string[i])` `        ``elif` `(dfa ``=``=` `1``):` `            ``state1(string[i])` `        ``elif` `(dfa ``=``=` `2``):` `            ``state2(string[i])` `        ``else``:` `            ``state3(string[i])         ` `    ``return` `(dfa !``=` `3``) `   `# Driver Code ` `if` `__name__ ``=``=` `"__main__"` `:` `    ``string``=``"forTHEgeeks"` `    `  `    ``# dfa tells the number associated ` `    ``# with the present state` `    ``dfa ``=` `0` `    ``if` `isAccepted(string):` `        ``print``(``"ACCEPTED"``)` `    ``else``:` `        ``print``(``"NOT ACCEPTED"``)`   `# This code is contributed by SHUBHAMSINGH10`

## C#

 `// C# program to implement DFS that accepts` `// all string that do not end with "THE"` `using` `System;`   `class` `GFG` `{` `    `  `// dfa tells the number associated` `// with the present state` `static` `int` `dfa = 0;`   `// This function is for` `// the starting state (zeroth) of DFA` `static` `void` `start(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `}`   `// This function is for the first state of DFA` `static` `void` `state1(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;`   `    ``// On receiving 'H' or 'h' goto second state (2)` `    ``else` `if` `(c == ``'h'` `|| c == ``'H'``)` `        ``dfa = 2;`   `    ``// else goto starting state (0)` `    ``else` `        ``dfa = 0;` `}`   `// This function is for the second state of DFA` `static` `void` `state2(``char` `c)` `{` `    ``// On receiving 'E' or 'e' goto third state (3)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'e'` `|| c == ``'E'``)` `        ``dfa = 3;` `    ``else` `        ``dfa = 0;` `}`   `// This function is for the third state of DFA` `static` `void` `state3(``char` `c)` `{` `    ``// On receiving 'T' or 't' goto first state (1)` `    ``// else goto starting state (0)` `    ``if` `(c == ``'t'` `|| c == ``'T'``)` `        ``dfa = 1;` `    ``else` `        ``dfa = 0;` `}`   `static` `bool` `isAccepted(``char` `[]str)` `{` `    ``// store length of string` `    ``int` `len = str.Length;`   `    ``for` `(``int` `i=0; i < len; i++) ` `    ``{` `            ``if` `(dfa == 0)` `                ``start(str[i]);`   `            ``else` `if` `(dfa == 1)` `                ``state1(str[i]);`   `            ``else` `if` `(dfa == 2)` `                ``state2(str[i]);`   `            ``else` `                ``state3(str[i]); ` `    ``}`   `    ``return` `(dfa != 3);` `}`   `// Driver code` `static` `public` `void` `Main ()` `{` `    ``char` `[]str = ``"forTHEgeeks"``.ToCharArray();` `    ``if` `(isAccepted(str) == ``true``)` `        ``Console.WriteLine(``"ACCEPTED\n"``);` `    ``else` `        ``Console.WriteLine(``"NOT ACCEPTED\n"``);` `}` `}`   `/* This code is contributed by ajit. */`

## PHP

 ``

## Javascript

 ``

Output :

`ACCEPTED`

Time Complexity: O(n)
Auxiliary Space: O(1) since it is using constant space

My Personal Notes arrow_drop_up
Related Articles