BF算法:
//返回模式串t在本串中的位置
int SeqString::Index(SeqString & t)
{
int i = 1,j = 1;//初始化主串和模式串t的字符下标i和j;
while (i <= GetLength() && j <= t.GetLength())
//若主串和模式串都没有比较完,则循环
{
//如果主串第i个字符等于模式串第j个字符,则下标i和j后移
if (Get(i) == t.Get(j)){i++;j++;}
else {i += 2-j;j = 1;}
}
//若模式串中所有字符都已比较完,则返回其在主串的位置
if (j > t.GetLength()) return i+1-j;
else return -1; //否则,查找失败,返回-1
}
优缺点:效率低,很多回溯是不必要的,但是思想简单;
改进:
KMP(Knuth-Morris-Pratt)算法
BM(Boyer-Moore)算法