数据结构 第四章总结

1.主串与模式串的模式匹配

这里讲了两种方法,bp暴力匹配和kmp算法。

想要理解kmp算法,就一定要弄懂kmp的核心,最长前后缀数组的求法。这里直接上代码。

void prefix_table(string a,int prefix[],int n)
{
    prefix[0]=0;
    int len=0;
    int i=1;//这里我选择从两个字符开始对比,应为从一开始是,自己和自己比一定相同。
    while(i<n)
    {
        if(a[i]==a[len])
        {    
            len++;
            prefix[i]=len;
            i++;
        }
        else if(len>0)
              {
                  len=prefix[len-1];
              }
               else
               {
                prefix[i]=len;
                i++;    
               }
    }
    for(int i=n-1;i>0;i--)//为了后续knp的实现方便,先将数组首位赋-1,其余后移。
    {
      prefix[i]=prefix[i-1];
    }
    prefix[0]=-1;
}

2.人工智能核心

我的去空格和老师的不同

   char b[MAXSIZE];//这个算法
    int j=0;
    b[0]=a[0];
    for(int i=0;i<a.length();i++)
    {
        if(b[j]!=a[i])
        {
            j++;
            b[j]=a[i];
        }
        else if(b[j]==a[i]&&a[i]!=' ')
        {
            j++;
            b[j]=a[i];
        }           
  这里可以看到,和后一个算法比较,前一个算法 是通过主串和用于存放的字符数组比较,而非主串的前后比较,这样可以保持操作的一致性。

    while(s[i]!='\0')
    {
    if(s[i]==' '&&s[i-1]==' ')
    {
        i++;
        continue;
    }

 

posted @ 2019-04-14 22:31  反派死于话多  阅读(193)  评论(1编辑  收藏  举报