# DFA for Strings not ending with “THE”

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.

Determinitis 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++

 `// CPP 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` `        ``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 stringing 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 stringing  ` `    ``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

 ` `

Output :

```ACCEPTED
```

The time complexity of this program is O(n)

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.