zoukankan      html  css  js  c++  java
  • 第4章学习小结

     1 {
     2     next[0]=-1;
     3     for(int i = 0,j=-1; i < (int)T.length(); )
     4     {
     5         if(j==-1 || T[i]==T[j])//i一直比j大;若T[i]与T[j]不相等, else语句能把
     6         //j减小到能与该第i个的字母相等或j返回到头时i++;  
     7         {
     8             i++;
     9             j++;
    10             next[i] = j;
    11         }
    12         else j = next[j];
    13     }
    14 }

    KMP算法的难点就在于next指针。

    接下来我就讲讲我对于next指针的个人理解:

      一、为什么要next指针?

        因为要在模式串的各个位置上记录这个位置之前最长的相同前后缀的长度

      二、什么是前后缀?

        为了跳过不必要的重复匹配。

      三、如何计算最大的前后缀?

        见以上代码;

    但是呢,在用KMP算法的过程中我遇到了两个问题(我觉得有必要记录一下):

      一、动态创建的数组传递形参要用指针而不能用数组首地址 。

      二、在用str.length()进行代数计算时要加上(int)进行类型转换

    1 string S;
    2 S.length();//这是无符号整型
  • 相关阅读:
    Redis(01)基础知识
    MySQL(05)触发器&事件&事务&锁
    MySQL(04)索引&存储过程
    MySQL(02)DDL&DML
    MySQL(03)表查询
    Go高级编程(01)
    兼容IE8灰色遮罩层处理方法
    AJAX请求跨域的问题
    Sql Server批量删除数据表
    [转]SQL操作日期
  • 原文地址:https://www.cnblogs.com/Winston-wmj/p/10706585.html
Copyright © 2011-2022 走看看