题解 | #kmp算法#

kmp算法

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

KMP算法

对于常规的KMP字符串匹配算法加以改进即可。
代码如下:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算模板串S在文本串T中出现了多少次
     * @param S string字符串 模板串
     * @param T string字符串 文本串
     * @return int整型
     */
    int kmp(string S, string T) {
        // write code here
        if(S.empty()||T.size()>T.size()) return 0;//对于边界条件的判断
        int res=0;//用于结果的返回
        int i=1,j=0;
        int next[S.size()];//首先求next数组,用于保存当字符串失配时模板串应该回退的指针值
        next[1]=0;//规定next[0]=1,
        while(i<S.length()){//求解,即字符串的最大相等前后缀长度
            if(j==0||S[i]==S[j]){
                ++i;++j;//若Pi=Pj则next[j+1]=next[j]+1
                next[i]=j;
            }
            else
                j=next[j];//否则,令j=next[j],循环继续
        }
        int k=1,l=1;
        while(k<=T.length()&&l<=S.length()){//KMP算法主体
             if(l==0||T[k]==S[l]){
                 ++k;++l;//继续比较后继字符串
             }
            else
                l=next[l];//失配时,模式串向右移
            if(l==S.length()){//改进之处在于,此时加个计数值
                res+=1; 
            }
        }
        return res;
    }
};
全部评论

相关推荐

兄弟们,绩效自评一定得给自己打A啊!千万别谦虚给低分,不然领导正愁给谁高分,你这不就“主动请缨”了嘛,而且多数领导不会给你更高分。我几年前试用期绩效自评打了B,领导就给了同等级,还好是试用期。真别等领导主动给高评价!
准备进厂的劳伦斯很迷人:小学时候有个册子 自评 小组 老师 我谦虚打了个b 小组别人给我打b 老师来句我觉得能给他打a 但是小组长说他自评是b怎么能打高呢 那时候我才明白的道理
点赞 评论 收藏
分享
头像
02-15 16:23
中南大学 Java
野猪不是猪🐗:签了美团真是不一样! 亲戚们都知道我签了美团,过年都围着我问送一单多少钱,还让弟弟妹妹们引以为戒,笑我爸我妈养了个🐢孩子,说从小就知道我这个人以后肯定没出息,我被骂的都快上天了
点赞 评论 收藏
分享
小狗吃臭臭:以后用不到你设计的手机了,可惜!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务