sunday算法和自己关于字符串匹配的一些思考

Sunday算法与kmp算法比较起来,更易理解,更容易实现,更重要的是kmp算法其实在实际运用中,并没有表现出来多大的效果。




所以Sunday算法就出来了。Sunday算法核心就是跳过更多的不需要比较的字符,我们可以考虑,字符串:s1,s2,i为指向s1的指针,j为指向s2的指针。

s1[i]!=s2[j],则传统的是我们要从s1[i]和s2[0]开始比较,这样其实太不理智,我们可以逆向思维,从后往前考虑,那么s2对应的s1后面的一个字符,如果和s2中从后往前的一个字符匹配,那么就可以分别移位到两个位置上去,反之没可能,则继续向下一个位置。

  public static bool sunday(string str1,string str2)
        {

            int i = 0,j=0;

            while (i < str1.Length && j < str2.Length&&str1.Length-i-1>str2.Length)
            {
                if (str1[i] == str2[j])
                {
                    if (j == str2.Length)
                    {
                        //匹配成功
                        break;
                    }
                    i++;
                    j++;
                }

                else

                {

                    int k = 0;
                    int s = i;
                    while (str2[k++]!=str1[s+str2.Length]&&s<str1.Length)
                    {
                        if (k >= str2.Length)
                        {
                            s++;
                        }
                    }

                    if (i == str1.Length)
                        break;

                    j = s - k;
                    i = j;
                
                
                }
            
            }


            return true;
        }



猜你喜欢

转载自blog.csdn.net/qq_20949153/article/details/52094080
今日推荐