zoukankan      html  css  js  c++  java
  • kmp java implement--转

    http://cs.nyu.edu/~yap/classes/basic/progs/patternMatching/KMP.java

    /**
      * @file    KMP.java
      * @synopsis     An implementation of KMP matching, derived from
      *        a modification of the Match.java program.
      *        Again, the goal is to find an occurrence of a pattern P in a text T.
      *        CONVENTION:
      *        The first index (i=0) of arrays are not used.
      *
      * @author    Chee Yap
      * @date    Apr 25, 2001 (for Basic Algorithms class)
      */
    
    public class KMP {
    
      // Members:
        char[] T;    // This is the text
         char[] P;    // This is pattern
        int [] fail;    // Failure function for pattern
    
      // Constructors:
    
        KMP(char[] p, char[] t) {
          P = p; T = t;
          computeFail();
        } //
    
      // Methods:
    
        /******************************************************
         Routine to compute the failure function 
         ******************************************************/
        public void computeFail() {
          // init:
            fail = new int[P.length];
            fail[1] = 0;
          // loop:
            for (int k=2; k< fail.length; k++) {
              int kk = fail[k-1];
              while (kk>0 && (P[kk] != P[k-1]))
                kk = fail[kk];
              fail[k] = 1 + kk;
            }
        } // computeFail(P)
    
        /******************************************************
         THIS IS THE MAIN ROUTINE
         ******************************************************/
        public int find(int start) {
          // init:
            int j = start; // text index 
            int k = 1; // pattern index
          // loop:
            while (j < T.length) {
              if (k >= P.length) return(j - k + 1);
              if ((T[j] == P[k]) || (k==0)) {
                j++; k++;
              } else {
                k = fail[k];    // k could become 0
              }
            } // while
          // Not found:
            return(-1);
        } // find()
    
        /******************************************************
         prints data
         ******************************************************/
        void output() {
          System.out.print("> Pattern = ""); 
          for (int i=1; i< P.length; i++) 
            System.out.print(P[i]);
          System.out.print(""
    > Text    = ""); 
          for (int i=1; i< T.length; i++) 
            System.out.print(T[i]);
          System.out.println(""");
        } // output()
    
    
        /******************************************************
         Main method
         ******************************************************/
        public static void main( String[] args) {
    
          // sample input with 6 keys
          //    (the first is a dummy key)
    
          // char[] p = {'0', 'o', 'u'};
          char[] p = {'0', 'y', 'o', 'u'};
          char[] t = {'0',
            'a', 'r', 'e', ' ', 'y', 'o', 'u', ' ',
            'a', ' ', 'y', 'o', 'u', 't', 'h', '?'};
    
          // construct a KMP object
          KMP m = new KMP(p, t);
          m.output();      // print data
    
          // find all matches
          int f = m.find(1);
          if (f<1)
              System.out.println(">>  No match found");
          else {
            while (f>=1) {
              System.out.println(">>  Match found at position " + f);
              f = m.find(f+1);
            }//while
          }//else
          } // main
    
    }//class KMP
  • 相关阅读:
    购物英语词汇
    生活学习英语词汇
    银行英语词汇
    烹饪英语词汇
    旅游英语词汇
    饮食英语词汇
    书英语词汇
    王元编辑口语资料中国传统之节日
    DataSet在WCF中怎么办?
    Python生成Wav格式文件
  • 原文地址:https://www.cnblogs.com/davidwang456/p/3485705.html
Copyright © 2011-2022 走看看