题解 | #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;
    }
}
全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
07-01 17:14
中北大学 Java
兄弟们是真是假
牛客46374834...:我在boss上投java岗从来没成功过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务