码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 28 Implement strStr()

时间:2019-06-03 12:39:51      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:后缀   个数   就是   直接   strstr   问题   etc   tco   while   

就是使用KMP算法进行字符串的匹配,但是我发现我之前的kmp写的有问题,然后修补了一下板子漏洞2333

next数组含义:next[i]表示 到i为止,前缀 和 后缀 相同的个数-1
(为啥-1呢,比如 aabaab, next[6] = 2,这样的话,aabaab不是的话 就直接失配到aab,大概意思就是这样)

class Solution {
public:
    int strStr(string s, string t) {
        int l1 = s.size(), l2 = t.size();
        if(l2 == 0)    return 0;
        int next[l2] = {0};
        next[0] = -1;
        for(int i=1; i<l2; i++) {
            int j = next[i-1];
            while(j!=-1 && t[j+1] != t[i])
                j = next[j];
            if(t[j+1] == t[i])
                next[i] = j+1;
            else 
                next[i] = -1;
        }
        // now kmp
        int i = 0, j = 0;
        while(i < l1) {
            if(s[i] == t[j]) {
                i++, j++;
                if(j == l2) {
                    return i-l2;
                }
            } else {
                if(j == 0)
                    i++;
                else 
                    j = next[j-1] + 1;
            }
        }
        return -1;
    }
};

leetcode 28 Implement strStr()

标签:后缀   个数   就是   直接   strstr   问题   etc   tco   while   

原文地址:https://www.cnblogs.com/Draymonder/p/10966662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!