扩展KMP 算法

来源:互联网 发布:淘宝怎么管理店铺 编辑:程序博客网 时间:2024/06/10 21:47

扩展KMP算法描述:

给出模板串S和串T,长度分别为Slen和Tlen,要求在线性时间内,对于每个S[i](0<=i<Slen),求出S[i..Slen-1]与T的

最长公共前缀长度,记为extend[i]


代码:

import java.util.Scanner;public class Main {public int[] getNext(String s){int[] next=new int[s.length()+1];    next[0]=s.length();    int a=0,p=0; //记录匹配成功的字符的最远位置p,及起始位置a    for(int i=1,j=-1;i<s.length();i++,j--){          if(j<0||i+next[i-a]>=p){            if(j<0){              p=i;j=0;            }            while(p<s.length()&&s.charAt(p)==s.charAt(j)){            p++;j++;            }            next[i]=j;            a=i;        }        else{        next[i]=next[i-a];        }    }    return next;}public int[] getExtend(String s,String t){int[] extend=new int[s.length()];int[] next=getNext(t);int a=0,p=0;for(int i=0,j=-1;i<s.length();i++,j--){if(j<0||i+next[i-a]>=p){if(j<0){j=0;p=i;}while(p<s.length()&&j<t.length()&&s.charAt(p)==t.charAt(j)){p++;j++;}extend[i]=j;a=i;}else{extend[i]=next[i-a];}}return extend;}}




原创粉丝点击