字符串匹配-BF算法
时间: 2023-11-18 11:57:16 浏览: 45
BF算法,即暴力(Brute Force)算法,是一种普通的模式匹配算法。其思想是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法,其效率较低,尤其是在最复杂的情况下,效率最低。但是,BF算法的实现简单,易于理解,是其他字符串匹配算法的基础。
相关问题
c++字符串匹配BF算法
C++实现字符串匹配BF算法是一种基本的模式匹配算法,其思想是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法,时间复杂度为O(n*m),其中n为目标串S的长度,m为模式串T的长度。
以下是C++实现字符串匹配BF算法的代码示例:
```c++
#include <iostream>
#include <string>
using namespace std;
int BF(string s, string t) {
int i = 0, j = 0;
while (i < s.length() && j < t.length()) {
if (s[i] == t[j]) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if (j == t.length()) {
return i - j;
} else {
return -1;
}
}
int main() {
string s = "hello world";
string t = "world";
int pos = BF(s, t);
if (pos != -1) {
cout << "匹配成功,位置为:" << pos << endl;
} else {
cout << "匹配失败" << endl;
}
return 0;
}
```
串的模式匹配算法--BF算法/KMP算法
BF算法和KMP算法都是串的模式匹配算法,但是它们的时间复杂度不同。BF算法的时间复杂度为O(m*n),其中m和n分别为主串和模式串的长度。而KMP算法的时间复杂度为O(m+n)。因此,当模式串较长时,KMP算法的效率更高。
下面是BF算法和KMP算法的介绍和演示:
1. BF算法(暴力匹配算法)
BF算法是一种朴素的模式匹配算法,它的思想是从主串的第一个字符开始,依次和模式串的每个字符进行比较,如果匹配成功,则继续比较下一个字符,否则从主串的下一个字符开始重新匹配。BF算法的时间复杂度为O(m*n)。
下面是BF算法的Python代码演示:
```python
def BF(main_str, pattern_str):
m = len(main_str)
n = len(pattern_str)
for i in range(m-n+1):
j = 0
while j < n and main_str[i+j] == pattern_str[j]:
j += 1
if j == n:
return i
return -1
# 测试
main_str = 'ababcabcacbab'
pattern_str = 'abcac'
print(BF(main_str, pattern_str)) # 输出:6
```
2. KMP算法(Knuth-Morris-Pratt算法)
KMP算法是一种改进的模式匹配算法,它的核心思想是利用已经匹配过的信息,尽量减少模式串与主串的匹配次数。具体来说,KMP算法通过预处理模式串,得到一个next数组,用于指导匹配过程中的跳转。KMP算法的时间复杂度为O(m+n)。
下面是KMP算法的Python代码演示:
```python
def KMP(main_str, pattern_str):
m = len(main_str)
n = len(pattern_str)
next = getNext(pattern_str)
i = 0
j = 0
while i < m and j < n:
if j == -1 or main_str[i] == pattern_str[j]:
i += 1
j += 1
else:
j = next[j]
if j == n:
return i - j
else:
return -1
def getNext(pattern_str):
n = len(pattern_str)
next = [-1] * n
i = 0
j = -1
while i < n-1:
if j == -1 or pattern_str[i] == pattern_str[j]:
i += 1
j += 1
next[i] = j
else:
j = next[j]
return next
# 测试
main_str = 'ababcabcacbab'
pattern_str = 'abcac'
print(KMP(main_str, pattern_str)) # 输出:6
```