zoukankan      html  css  js  c++  java
  • Java KMP算法代码

    1. KMP 算法(字符串匹配算法)较 BF(朴素的字符串匹配)算法有哪些改进

    1) 在主串和子串匹配的过程中,主串不再回退,只改变子串的比较位置。

    2) 为子串生成对应的next数组,每次匹配失败,通过访问next数组获知子串再一次开始匹配的位置。

    2.  在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的

    前缀。

         因此KMP算法的思想就是:在匹配过程称,若发生不匹配的情况,如果next[j]>=0,则目标串的指针i不变,将模式串的指针j移动到next[j]的位置继续进行匹配;若next[j]=-1,则将i右移1位,并将j置0,继续进行比较。

    public class KMP {
        public static void main(String[] args) {
            String a="aawsadabbb";
            String b="abb";
            System.out.println(KMP(a,b));
        }
        public static int  KMP(String s,String t ){
            int i=0;
            int j=0;
            int []next=getNext(t);
            while (i<s.length()&&j<t.length()){
                if(j==-1||s.charAt(i)==t.charAt(j)){
                    i++;j++;
                }else {
                    j=next[j];
                }
            }
            if(j==t.length()){
                return i-j;
            }else {
                return -1;
            }
        }
    // 求取next数组
        private static int[] getNext(String t) {
            int k=-1;
            int j=0;
            int []next=new int[t.length()];
            next[0]=-1;
            while (j<t.length()-1){
                if(k==-1||t.charAt(k)==t.charAt(j)) {
                    k++;
                    j++;
                    next[j]=k;
                }else {
                    k=next[k];
                }
            }
            return next;
        }
    }
  • 相关阅读:
    Ajax服务端框架的综合示例
    《Microsoft Sql server 2008 Internals》读书笔记目录索引
    Pro ASP.NET MVC 3 Framework
    C#客户端的异步操作
    在.net中读写config文件的各种方法
    KMP算法分析
    asp.net 4.0 + 模板引擎(NVelocity)CMS
    mvc3
    开源 Asp.net mvc 用户中心开发计划
    JqueryCMS
  • 原文地址:https://www.cnblogs.com/jiezai/p/11146865.html
Copyright © 2011-2022 走看看