题解 | #kmp算法#

kmp算法

http://www.nowcoder.com/practice/bb1615c381cc4237919d1aa448083bcc

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算模板串S在文本串T中出现了多少次
     * @param S string字符串 模板串
     * @param T string字符串 文本串
     * @return int整型
     */
    public int kmp (String S, String T) {
        // write code here

        int S_len = S.length(), T_len = T.length();
        char[] chs = S.toCharArray();
        char[] cht = T.toCharArray();
        int val=0;
        int[] F = new int[S_len];
        int i=1,j=0;
        F[0]=0;
        while(i<S_len ){   //对S字符串进行预处理,建立内部滑动关系。
            if(chs[i]==chs[j]){
                F[i] = j+1;
                i++;
                j++;
            }
            else if(j>0)
                j = F[j-1];
            else{
                F[i] = 0;
                i++;
            }
        }
        i=0;
        j=0;
        while(i<T_len){
            if(chs[j]==cht[i]){
                if(j==(S_len-1)){
                    val++;
                    j= F[j]; //回到数组最大可滑动幅度
                    i++;
                }
                else{i++;j++;}
            }
            else if(j>0)
                j = F[j-1]; //回到前一个类似的关联点
            else
                i++;
        }
        return val;
    }
}
全部评论

相关推荐

小火柴燃烧吧:接啊,接了之后反手在咸鱼找个大学生搞一下,量大从优
点赞 评论 收藏
分享
希望各位大哥分享一下自己的看法,对于机器人行业确实不太了解
绝顶但不聪明:如果是机器人相关岗位,优先优必选(专门***器人的),其他岗位选小米
投递小米集团等公司10个岗位 > 牛客解忧铺 牛客在线求职答疑中心
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务