回 帖 发 新 帖 刷新版面

主题:KMP算法

#include<iostream>
#include<string>
#include<vector>
using namespace std;

void GetNext(string & str,vector<int> & next)
{
 int i=0,j=-1;
 next[i]=-1;
 int temp2=str.size();
 while(i<temp2)
 {
  if(j==-1 || str[i]==str[j])
  {
   ++i;
   ++j;
   if(str[i]!=str[j])
   {
    next[i]=j;
   }
   else
   {
    next[i]=next[j];
   }
  }
  else
  {
   j=next[j];
  }
 }
}
int Index(string & mStr,string & cStr,int pos)
{
 int i=pos,j=-1;
 vector<int> next(cStr.size(),-1);
 GetNext(cStr,next);
 for(vector<int>::size_type ix=0;ix!=next.size();ix++)
 {
  cout<<next[ix]<<" ";
 }
 cout<<endl;
 int temp=cStr.size();
 while(i<mStr.size() && j<temp)
 {
  if(j==-1 || mStr[i]==cStr[j])
  {
   ++i;
   ++j;
  }
  else
  {
   j=next[j];
  }
 }
 if(j>=temp)
  return (i-temp); //此处返回报错,请求高手指点
 return -1;
}
int main(void)
{
 string mStr="yincheng";
 string cStr="en";
 int temp=Index(mStr,cStr,0);
 if(temp==-1)
 {
  cout<<"无子串!"<<endl;
 }
 else
 {
  cout<<"开始匹配位置:"<<temp<<endl;
 }
 return 0;
}

回复列表 (共1个回复)

沙发

顶一个,学习了

我来回复

您尚未登录,请登录后再回复。点此登录或注册