最近在为找工作做准备,很多数据结构的基础算法都没学过,记录一下煎熬的学习过程。
BF:brute force,暴力匹配法,从主串S的第一个字符开始和子串T的第一个字符进行比较,若相等,则主串和子串都往后移一个字符进行比较;若不相等,则从主串的第二个字符开始和子串的第一个字符重新开始比较,重复上诉过程,若子串T中的字符全部比较完毕,则说明本趟匹配成功;否则不成功。这个算法称为朴素的模式匹配算法,简称BF算法。实现代码如下:
// 第一种写法
#include <iostream>
#include <string>
using namespace std;
int Bf_find(string& str, string& tar)
{
int n = str.length();
int m = tar.length();
//参数判断
if(str.empty() || tar.empty() || n < m)
return -1;
for(int i = 0; i <= n-m; i++)
{
for(int j = 0; j < m; j++)
{ //元素不等,跳出循环
if(str.at(i) != tar.at(j))
{
break;
}
//匹配完成,返回位置
if(j == m)
return i;
}
}
return -1;
}
// 第二种写法
#include <iostream>
#include <string>
using namespace std;
int Bf_find(string& str, string& tar)
{
if(str.empty() || tar.empty() || str.length() < tar.length())
return -1;
int i = 0, j = 0, count = 0;
while( i < str.length())
{
if(str.at(i) == tar.at(j))
{
i ++;
j ++;
count ++;
}
else
{
i ++;
j = 0;
count = 0;
}
if(count == tar.length())
return i-count+1;
}
return -1;
}