zoukankan      html  css  js  c++  java
  • KMP algorithm challenge string.Contains

    KMP:

     public int KMP (ReadOnlySpan<char> content, ReadOnlySpan<char> span) {
                _next = new int[span.Length];
                GetNext (span);
                int i = 0;
                int j = 0;
                while (i < content.Length && j < span.Length) {
                    if (j == 0 || content[i] == span[j]) {
                         if(content[i]==span[j])
                            j++;
                        i++;
                       
                    } else
                        j = _next[j];
                }
                if (j >= span.Length)
                    return i - span.Length;
                else
                    return -1;
    
            }
    
            private void GetNext (ReadOnlySpan<char> content) {
                _next[0] = 0;
                for (int i = 1; i < _next.Length; i++) {
                    if (_next[i - 1] != 0) {
                        if (content[i] == content[_next[i - 1]])
                            _next[i] = _next[i - 1] + 1;
                    } else {
                        if (content[0] == content[i])
                            _next[i] = 1;
                        else
                            _next[i] = 0;
                    }
                }
            }
    

    string.Contains and KMP benchmarks:

      [Benchmark]
            public void TestStringContain()
            {
                string s = "abcasdfasfdkjefasdfasdaaadfdfasdfasdfasdfjjsdjfjsglskdfjskdjfaskjdflkasjgksajdfksjdf";
                bool x = s.Contains("asdfasd",StringComparison.Ordinal);
            }
    
             [Benchmark]
            public void TestKMP()
            {
                int x = containKeyWords.KMP("abcasdfasfdkjefasdfasdaaadfdfasdfasdfasdfjjsdjfjsglskdfjskdjfaskjdflkasjgksajdfksjdf", "asdfasd");
            }
    
    

    result:

    Complete defeat!

  • 相关阅读:
    tomcat与resin的比较
    Linux Resin 安装配置
    [BZOJ3456]城市规划
    ZJOI 2017 仙人掌
    「LibreOJ NOI Round #1」动态几何问题
    [SDOI2015]约数个数和
    codeforce 940F
    codeforce 940F
    codeforce 940E
    [NOI2009]植物大战僵尸
  • 原文地址:https://www.cnblogs.com/dacc123/p/10656838.html
Copyright © 2011-2022 走看看