LeetCode 28. Implement strStr暴力搜索和KMP算法

来源:互联网 发布:周清扬的淘宝店铺名 编辑:程序博客网 时间:2024/05/18 02:54

/************************************************************************
* Implement strStr().
*
* Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
*
************************************************************************/
方法一:暴力搜索算法

 int strStr(string haystack, string needle) {        int hlen=haystack.size(),nlen=needle.size();        int i=0,j=0;        while (i<hlen&&j<nlen) {            if (haystack[i]==needle[j]) {                ++i;++j;            }            else {                i=i-j+1;                j=0;            }        }        return (j==nlen) ? i-j:-1;    }

方法二:KMP算法

void NextArrayCal(string &str,vector<int> &next)  {      int j=0,k=-1;      next[0]=-1;      while(j<str.size()-1)      {          if(k==-1||str[j]==str[k])          {              j++,k++;              if(str[j]!=str[k])                  next[j]=k;              else                  next[j]=next[k];             // next[j]=k;  //可不要        }          else              k=next[k];      }  }      int strStr(string haystack, string needle) {        int hlen=haystack.size(),nlen=needle.size();        if (nlen == 0) return 0;//一定注意要有,因为调用函数中有                              int i=0,j=0;            //next[0]=-1;        vector<int>next(nlen);          NextArrayCal(needle,next);          while (i<hlen&&j<nlen) {            if (j==-1||haystack[i]==needle[j]) {                ++i;++j;            }            else                j=next[j];        }        return (j==nlen) ? i-j:-1;    }
0 0
原创粉丝点击