串的模式匹配算法-BF(Brute-Force)算法

Bruce-Force算法

    1.思路:

       简单暴力的一个算法,如果遇到字符不匹配,主串i指针回溯到本次匹配位置的下一个位置,而模式串则重新回到0(开始的位置),开始下一轮的匹配。

        成功匹配的条件自然事模式串指针j走到头,也就是j=length-1,length为模式串长度。跳出循环表示为j=length

    2.算法复杂度

       O(n*m),n,m分别是两个串长度。

    3.小吐一番

        有兴趣的小火半可以看下同时写的KMP算法 :点击打开链接   

        只能说这个更为简单易懂但就是容易Running Time Error....,有了BF的基础再去看上面的KMP哦~:)友好提示

 

Bruce-Force算法实现

    

#include
#include
using namespace std;

int Brute_Force_Algorithm(string Primer_Str, string Str)
{
	int i = 0, j = 0;
	int Length1 = Primer_Str.length();
	int Length2 = Str.length();
	while (i < Length1&&j < Length2)
	{
		if (Primer_Str[i] == Str[j])
		{
			i++;
			j++;
		}
		else
		{
			i = i - j + 1;   //字符不匹配,则主串的i指针回溯到本次开始的位置的下一个位置
			j = 0;    //模式串指针回到串头
		}
	}
	if (j == Length2)
		return i - Length2 + 1;
	else
		return -1;
}

int main()
{
	string Primer_Str, Str;
	cin >> Primer_Str >> Str;
	cout << Brute_Force_Algorithm(Primer_Str, Str) << endl;
	return 0;
}

            

 

    BY_THE_WAY: Sad,隔了半个月才出了两篇,渣男在努力~,下周高数over进入B(it)树啦

你可能感兴趣的:(字符串)