字符串匹配算法之RK算法


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PK
{
    class Program
    {
        static void Main(string[] args)
        {


            Console.WriteLine(RK("abcdef", "abce"));
            Console.WriteLine(RK("abcdef", "ab"));
            Console.WriteLine(RK("abcdef", "bc"));
            Console.WriteLine(RK("abcdef", "cd"));
            Console.WriteLine(RK("abcdef", "de"));
            Console.WriteLine(RK("abcdef", "ef"));
            Console.WriteLine(RK("abcdef", "ef3"));
            Console.ReadKey();
        }



        private static int RK(string resStr, string pStr)
        {
            int result = -1;
            int pStrHash = pStr.GetHashCode();

            int resStrLength = resStr.Length;
            int pStrLength = pStr.Length;


            for (int i = 0; i < resStrLength; i++)
            {
                int stepEnd = i + pStrLength;
                int stepStart = i;
                if (stepEnd > resStrLength) return result;
                string tmpStr = "";
                for (int j = stepStart; j < stepEnd; j++)
                {
                    tmpStr += resStr[j];
                    if (tmpStr.GetHashCode() == pStrHash)
                    {
                        result = stepStart;
                        return result;
                    }
                }
            }
            return result;
        }
    }
}

打印结果: