kmp 快速模式串匹配

题目要求:输入一个str串,输入一个将要匹配的match串,若匹配成功,返回match在str中的第一个位置,否则返回-1


举例 : str   :abc123

            match: 123

           返回 3      


import java.util.*;



public class Main{
    public static void main(String[] args){
        Scanner s=new Scanner(System.in);
        String str=s.nextLine();
        String match=s.nextLine();
        System.out.println(getIndexOf(str,match));
    }
    
    public static int getIndexOf(String str,String match){
        if(str==null|| match==null || match.length()<1 || match.length()> str.length())
            return -1;
        char []ss=str.toCharArray(); char []ms=match.toCharArray(); int []next=getNextArray(ms);
        int si=0; int mi=0;
        while(si<ss.length && mi<ms.length){
            if(ss[si] == ms[mi]){
                si++; mi++;
            }else if(next[mi] == -1)
            si++;
                else         
                    mi=next[mi];
        }
        return mi==ms.length ? si-mi :-1;
    }
    
    public static int[] getNextArray( char []ms){   //求next数组
     if(ms.length == 1)
         return new int[]{-1};
        int []next=new int[ms.length];
        next[0] = -1; next[1] = 0;
        int pos = 2; int cn = 0;
        while(pos<ms.length){
            if(ms[pos-1] == ms[cn])
                next[pos++] = ++cn;
            else if(cn > 0)
                cn=next[cn];
                else
                next[pos++]=0;
         }
        return next;
    }
}
全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务