This is a java program to perform search using DFA.
Here is the source code of the Java Program to Perform Finite State Automaton based Search. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.maixuanviet.setandstring;
import java.util.Scanner;
public class SearchStringUsingDFA
{
public static final int NO_OF_CHARS = 256;
public static int getNextState(char[] pat, int M, int state, int x)
{
/*
* If the character c is same as next character in pattern,
* then simply increment state
*/
if (state < M && x == pat[state])
return state + 1;
int ns, i;
/*
* ns stores the result which is next state
* ns finally contains the longest prefix which is also suffix
* in "pat[0..state-1]c"
* Start from the largest possible value and stop when you find
* a prefix which is also suffix
*/
for (ns = state; ns > 0; ns--)
{
if (pat[ns - 1] == x)
{
for (i = 0; i < ns - 1; i++)
{
if (pat[i] != pat[state - ns + 1 + i])
break;
}
if (i == ns - 1)
return ns;
}
}
return 0;
}
/*
* This function builds the TF table which represents Finite Automata for a
* given pattern
*/
public static void computeTF(char[] pat, int M, int[][] TF)
{
int state, x;
for (state = 0; state <= M; ++state)
for (x = 0; x < NO_OF_CHARS; ++x)
TF[state][x] = getNextState(pat, M, state, x);
}
/*
* Prints all occurrences of pat in txt
*/
public static void search(char[] pat, char[] txt)
{
int M = pat.length;
int N = txt.length;
int[][] TF = new int[M + 1][NO_OF_CHARS];
computeTF(pat, M, TF);
// Process txt over FA.
int i, state = 0;
for (i = 0; i < N; i++)
{
state = TF[state][txt[i]];
if (state == M)
{
System.out.print(pat);
System.out.print(" found at " + (i - M + 1));
}
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the main string: ");
String main = sc.nextLine();
System.out.println("Enter the pattern string: ");
String pattern = sc.nextLine();
search(pattern.toCharArray(), main.toCharArray());
sc.close();
}
}
Output:
$ javac SearchStringUsingDFA.java $ java SearchStringUsingDFA Enter the main string: Sanfoundry is No. 1 choice for Deep Hands-ON Trainings in SAN, Linux & C, Kernel & Device Driver Programming. Our Founder has trained employees of almost all Top Companies in India. Here are few of them: VMware, Citrix, Oracle, Motorola, Ericsson, Aricent, HP, Intuit, Microsoft, Cisco, SAP Labs, Siemens, Symantec, Redhat, Chelsio, Cavium Networks, ST Microelectronics, Samsung, LG-Soft, Wipro, TCS, HCL, IBM, Accenture, HSBC, Northwest Bank, Mphasis, Tata Elxsi, Tata Communications, Mindtree, Cognizant, mid size IT companies and many Startups. Students from top Universities and colleges such as NIT Trichy, BITS Pilani, University of California, Irvine, University of Texas, Austin & PESIT Bangalore have benefited a lot from these courses as well. The assignments and real time projects for our courses are of extremely high quality with excellent learning curve. Enter the pattern string: Trainings Trainings found at 45
Related posts:
How to Get All Spring-Managed Beans?
Java Program to Implement Hash Tables Chaining with Binary Trees
Java Program to Find the Connected Components of an UnDirected Graph
Java Program to Check if a Matrix is Invertible
Java Program to Implement Trie
Guide to System.gc()
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing
Java Program to Implement Stack API
Spring RestTemplate Request/Response Logging
Spring Data JPA and Null Parameters
Spring Boot - Build Systems
Java Program to Implement Fermat Primality Test Algorithm
Working with Kotlin and JPA
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Java Program to Find a Good Feedback Vertex Set
What is a POJO Class?
The Spring @Controller and @RestController Annotations
Java Program to Implement DelayQueue API
HttpAsyncClient Tutorial
HttpClient Connection Management
A Guide to Apache Commons Collections CollectionUtils
Java – File to Reader
Java Program to Implement Fibonacci Heap
Model, ModelMap, and ModelAndView in Spring MVC
Lập trình đa luồng với CompletableFuture trong Java 8
Java Program to Implement Sorted Doubly Linked List
Spring JDBC
Using the Not Operator in If Conditions in Java
Java Program to Find Maximum Element in an Array using Binary Search
Java Program to Implement Bucket Sort
Java Program to Implement Karatsuba Multiplication Algorithm
Quick Guide on Loading Initial Data with Spring Boot