zoukankan      html  css  js  c++  java
  • KMP字符串匹配算法

    static void Main(string[] args)
    {
        var d = KMP("abcabcadabc55abcabcadabc55", "abcabcadabc");
    }
    static List<int> KMP(string s, string p)
    {
        int[] pi = ComputePrefix(p);
        List<int> result = new List<int>();
        int q = 0;
        for (int i = 0; i < s.Length; i++)
        {
            //如果不相等了,查看这次匹配不相等的下次匹配个数
            while (q > 0 && p[q] != s[i])
                q = pi[q - 1];
            //记录已经相等的个数
            if (p[q] == s[i])
                q++;
            if (q == p.Length - 1)
            {
                result.Add(i - q);
                q = pi[q - 1] + 1;
            }
        }
        return result;
    }
    static int[] ComputePrefix(string p)
    {
        var pi = new int[p.Length];
        pi[0] = 0;
        int k = 0;
        for (int i = 1; i < p.Length; i++)
        {
            //如果不相等了,查看这次匹配不相等的下次匹配个数
            while (k > 0 && p[k] != p[i])
                k = pi[k - 1];
            //记录已经相等的个数
            if (p[k] == p[i])
                k++;
            pi[i] = k;
        }
        return pi;
    }
  • 相关阅读:
    五月八日冲刺
    五月七号冲刺
    五月六日站立会议
    prufer序列学习笔记
    批量数据导入优化
    索引失效
    慢查询定位与分析
    redis主从同步
    redis RBD机制
    redis AOF机制
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5231619.html
Copyright © 2011-2022 走看看