bf算法

BF算法(蛮力匹配)

岁酱吖の 提交于 2019-12-01 07:45:29
输入主串a,模式b b在a中的位置 1.在串a和串b中设置比较的下标i=0,j=0; 2.重复下述操作,直到a或b的所有字符均比较完毕:   2.1如果a[i]等于b[i],继续比较a和b的下一对字符;   2.2负责,下标i和j分别回溯,开始下一趟匹配; 3.如果b中所有字符均比较完,则匹配成功,返回本趟匹配的起始位置;负责匹配失败,返回0; #include<iostream> #define N 100000 using namespace std; char a[N],b[N]; int BF(char a[],char b[])//BF算法 { int i = 0,j = 0;//i,j变量分别表示在主串和模式串的位置 int start = 0;//start记录主串回溯的位置 while(a[i] != '\0' && b[j] != '\0') { if(a[i] == b[j]) { i++; j++; } else { start++; i = start; j = 0; } } if(b[j] == '\0')//如果是模式串所有匹配完成,即匹配成功,返回位置 return start + 1; else//否则匹配失败 return 0; } int main() { int t; cin >> t;//t个测试样例 while(t--) { int

字符串 模式匹配

假装没事ソ 提交于 2019-11-28 10:02:39
要点 模式匹配 是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是 模式匹配 。 假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如果T中存在一个或多个模式为P的子串,就给出该子串在T中的位置,称为匹配成功;否则匹配失败。 文中代码是本人自己写的,实测有效,含JAVA和C++两种代码。干货充足吧。 蛮力算法 (BF算法) 蛮力算法(Brute-Force),简称 BF算法 。(男朋友算法,简单粗暴—_—!) 算法思想 BF算法的 算法思想 是: 从 目标串T 的的第一个字符起与 模式串P 的第一个字符比较。 若相等,则继续对字符进行后续的比较;否则目标串从第二个字符起与模式串的第一个字符重新比较。 直至模式串中的每个字符依次和目标串中的一个连续的字符序列相等为止,此时称为匹配成功,否则匹配失败。 通过下图示例,可一目了然: 算法性能 假设模式串的长度是m,目标串的长度是n。 最坏的情况 是每遍比较都在最后出现不等,即没变最多比较m次,最多比较n-m+1遍。 总的比较次数最多为m(n-m+1),因此BF算法的时间复杂度为O(mn)。 BF算法中 存在回溯 ,这影响到效率,因而在实际应用中很少采用。 代码 JAVA版本 1 public class