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

KMP算法

时间:2014-09-06 17:22:43      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   div   cti   sp   

KMP算法

class KMP
{
public:
    vector<int> create_prefix_function(string s)
    {
        vector<int> next(s.size(), 0);
        next[0] = 0;
        int k = 0;
        for (int q = 1; q < s.size(); q++)
        {
            while (k > 0 && (s[k] != s[q]))
            {
                k = next[k - 1];
            }
            if (s[k] == s[q])
            {
                k = k + 1;
            }
            next[q] = k;
        }
        return next;
    }
    vector<int> match(string text, string query)
    {
        vector<int> next = create_prefix_function(query);
        vector<int> result;
        int q = 0;
        for (int i = 0; i < text.size(); i++)
        {
            while (q > 0 && (query[q] != text[i]))
            {
                q = next[q - 1];
            }
            if (query[q] == text[i])
            {
                q = q + 1;
            }
            if (q == query.size() - 1)
            {
                result.push_back(i - q + 1);
                q = next[q];
            }
        }
        return result;
    }
};

int main(int argc, char **argv)
{
    KMP kmp;
    string text = "abababacaba";
    string query = "ababaca";
    vector<int> result = kmp.match(text, query);
    
    getchar();
    return 0;
}

最后的结果为2,表示从text索引2开始匹配

KMP算法

标签:style   blog   color   io   ar   for   div   cti   sp   

原文地址:http://www.cnblogs.com/liuzhijiang123/p/3959514.html

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