sunday算法

sunday算法是个特别容易记和理解的算法,但是我看网上很多博客都写错了。所以整理了一下,

 

防止自己遗忘,sunday算法的原理很简单。

 

 1. 匹配,然后出现不匹配的时候,看主串最后一个元素的下一个元素,从右往左(为什么从右往左)检查子串是否包含(为什么要这样)

为什么从右往左:因为下一个如果匹配的子串,第一个肯定先和最右边的那个i对应上,这样就跳过了好多。

2.重新对上以后,再重复一步骤,是不是很简单,但是代码可不简单。

代码:难点是位置的坐标很容易混,有个好记的办法就是,没有常数+1或者-1

class Solution {
    public int strStr(String haystack, String needle) {
            if(haystack!=null&&needle.equals(""))
             return 0;
            int x=0;
            int j=0;
            while(x<haystack.length()&&j<needle.length())
            {
                int  num=0;
                while(x+num<haystack.length()&&num<needle.length()&&haystack.charAt(x+num)==needle.charAt(num))
                {
                    num++;
                }
                if(num==needle.length())
                    return x;
                char p=' ';
                if(x+needle.length()<haystack.length())
                    p=haystack.charAt(x+needle.length());
                int loc=needle.lastIndexOf(p);
                if(loc==-1)
                    x=x+needle.length();
                else
                {
                x=x+needle.length()-loc;
                }
            }
            return -1; 
    }
}

 

posted @ 2019-09-01 22:24  pc_m  阅读(1297)  评论(0编辑  收藏  举报