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;
    }
  • 相关阅读:
    curl 文件上传
    地区选择三级联动
    水平居中
    z-index
    css垂直居中
    Enrolment API
    阿里云OSS存储
    java中的vo、dto 、dao
    Spring mvc 中使用 kaptcha 验证码
    将下载的本地的jar手动添加到maven仓库
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5231619.html
Copyright © 2011-2022 走看看