BF(回溯)算法分析

标题 BF(回溯)算法分析

1 BF(回溯)算法
若看目标串T是否是源串S的子串,可采用BF算法,具体实现如下所示:
设 T = “qwer”, S = “aqwdqwerd”

S = a q w d q w e r d
T = q w e r

第一步将T0与S0比较,q不等于a;
第二步将T0与S1比较,相等;
第三步将T1与S2比较,相等;
第四步将T2与S3比较,不相等;
此时将T从头再来,与S[2]比较;
再依次进行上面的重复步骤,来判断T是否是S的子串。
具体c++代码见下:

#include
using namespace std;

int Find(string S, string T)
{
	int slen = S.length(), tlen = T.length();
	int i = 0, j = 0, k = 0;
	while (i < slen && j < tlen)
	{
		if (S[i] == T[j])
		{
			k = i;
			i++;
			j++;
		}
		else
		{
			i = k++;   // 此处要用k++,不能用k+1。
			j = 0;
		}
	}
	if (j == tlen)
		return i - tlen + 1;
	else
		return 0;
}

int main() {

	string S = "aqwdqwerd";
	string T = "qwer";
	cout << Find(S, T) << endl;

	system("pause");

	return 0;
}

你可能感兴趣的:(算法,数据结构,c++)