从主串s1中删除子串s2

寻找相同字符串采用kmp算法,这种算法比普通寻找相同字符串更省时、高效,前提是了解kmp算法,不会的学习一下,以后的编程路上必不可少。

 

#include 
#include 
#include 
using namespace std;
void cal_next(string s,int *next)  //kmp算法中求子串next[]的值
{
    int n=s.size();
    int k=-1;
    next[0]=-1;
    for(int i=1; i-1&&s[k+1]!=s[i])
        {
            k=next[k];
        }
        if(s[k+1]==s[i])
        {
            k++;
        }
        next[i]=k;
    }
}
void Cancel(string &s1,string s2)   //删除主串s1中子串s2部分
{
    int plen=s2.size();
    int len=s1.size();
    int *next=new int[plen];    //如果数组长度为变量名,应动态申请
    cal_next(s2,next);    //kmp算法中求子串next[]的值
    int k=-1;
    for(int i=0; i-1&&s2[k+1]!=s1[i])
        {
            k=next[k];
        }
        if(s2[k+1]==s1[i])
            k++;
        if(k==plen-1)
        {
            s1.erase(i-3,4);    //在主串中删除子串
            k=-1;
            i-=4;
            len-=plen;
        }
    }
    cout<

 

你可能感兴趣的:(从主串s1中删除子串s2)