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:
Receive email using IMAP
Intro to the Jackson ObjectMapper
Tạo chương trình Java đầu tiên sử dụng Eclipse
Request a Delivery / Read Receipt in Javamail
Guide to the Volatile Keyword in Java
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Java Program to Encode a Message Using Playfair Cipher
Mapping a Dynamic JSON Object with Jackson
Java Program to Implement Sieve Of Sundaram
Lớp lồng nhau trong java (Java inner class)
Spring Cloud – Bootstrapping
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Java Program to Create a Balanced Binary Tree of the Incoming Data
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Write/Read cookies using HTTP and Read a file from the internet
Spring Boot - Admin Server
Test a REST API with Java
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Java Program to Check if it is a Sparse Matrix
Sorting Query Results with Spring Data
Java Program to Perform Insertion in a 2 Dimension K-D Tree
New Features in Java 12
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Java Program to Implement the RSA Algorithm
Hướng dẫn Java Design Pattern – Singleton
Java Program to Generate Randomized Sequence of Given Range of Numbers
Quick Guide to Spring Bean Scopes
Spring WebClient vs. RestTemplate
Java Program to Implement Heap Sort Using Library Functions
MyBatis with Spring
Converting String to Stream of chars
Java Program to Find Transpose of a Graph Matrix