/** @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) */import java.util.Scanner;// An implementaion of string matching using finite automatapublic class StringMatchFiniteAutomata {public static final int CHARS = 256;public static int[][] FA;public static Scanner scanner = null;public static void main(String[] args) {scanner = new Scanner(System.in);System.out.println("Enter String");String text = scanner.nextLine();System.out.println("Enter pattern");String pat = scanner.nextLine();searchPat(text, pat);scanner.close();}public static void searchPat(String text, String pat) {int m = pat.length();int n = text.length();FA = new int[m + 1][CHARS];computeFA(pat, m, FA);int state = 0;for (int i = 0; i < n; i++) {state = FA[state][text.charAt(i)];if (state == m) {System.out.println("Pattern found at index " + (i - m + 1));}}}// Computes finite automata for the parternpublic static void computeFA(String pat, int m, int[][] FA) {for (int state = 0; state <= m; ++state) {for (int x = 0; x < CHARS; ++x) {FA[state][x] = getNextState(pat, m, state, x);}}}public static int getNextState(String pat, int m, int state, int x) {// if current state is less than length of pattern// and input character of pattern matches the character in the alphabet// then automata goes to next stateif (state < m && x == pat.charAt(state)) {return state + 1;}for (int ns = state; ns > 0; ns--) {if (pat.charAt(ns - 1) == x) {for (int i = 0; i < ns - 1; i++) {if (pat.charAt(i) != pat.charAt(state - ns + i + 1)) {break;}if (i == ns - 1) {return ns;}}}}return 0;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。