鱼C论坛

 找回密码
 立即注册
查看: 3002|回复: 0

[学习笔记] BF算法

[复制链接]
发表于 2021-10-15 13:38:54 | 显示全部楼层 |阅读模式
6鱼币
  1. // 返回子串T在主串S中第pos个字符之后的位置
  2. // 若不存在,则返回0
  3. // T非空,1 <= pos <= strlen(S)
  4. // 注意:我们这里为了表述方便,字符串使用了第一个元素表示长度的方式。

  5. int index( String S, String T, int pos )
  6. {
  7.         int i = pos;        // i用于主串S中当前位置下标
  8.         int j = 1;                // j用于子串T中当前位置下标
  9.         
  10.         while( i <= S[0] && j <= T[0] )        // i或j其中一个到达尾部即终止搜索!
  11.         {
  12.                 if( S[i] == T[i] )        // 若相等则继续下一个元素匹配
  13.                 {
  14.                         i++;
  15.                         j++;
  16.                 }
  17.                 else                                // 若失配则j回溯到第一个元素从新匹配
  18.                 {
  19.                         i = i-j+2;                // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
  20.                         j = 1;
  21.                 }
  22.         }
  23.         
  24.         if( j > T[0] )
  25.         {
  26.                 return i - T[0];
  27.         }
  28.         else
  29.         {
  30.                 return 0;
  31.         }
  32. }
复制代码

假设S[7] = Q,那么在i = 7, j = 2时候不匹配,所以 i = i - j + 2,所以 i = 7 - 2+2 =7
若在i = 8 ,j = 3时候不匹配那么i = 8 - 3 + 2=7怎么还是等于7
求解答i = i - j +2这一行代码的意思

如图

如图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表