鱼C论坛

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

[学习笔记] BF算法

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

int index( String S, String T, int pos )
{
        int i = pos;        // i用于主串S中当前位置下标
        int j = 1;                // j用于子串T中当前位置下标
        
        while( i <= S[0] && j <= T[0] )        // i或j其中一个到达尾部即终止搜索!
        {
                if( S[i] == T[i] )        // 若相等则继续下一个元素匹配
                {
                        i++;
                        j++;
                }
                else                                // 若失配则j回溯到第一个元素从新匹配
                {
                        i = i-j+2;                // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
                        j = 1;
                }
        }
        
        if( j > T[0] )
        {
                return i - T[0];
        }
        else
        {
                return 0;
        }
}
假设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-12-22 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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