字符串模式匹配问题的两种算法
问题描述
给定文本串 t ,与模式串 p,要求从文本串 t 中找出第一次出现模式串 p 的位置。
基本的匹配算法(暴力求解)
思路
文本串t从i=0开始,模式串p从就开始,依次比较,如图
当出现不匹配时,j回溯首位,i++,再次依次按位比较。想法朴素,简单,但是每次相当于p串只向后移动了一位。
暴力法代码(C++):
#include <iostream>
using namespace std;
int BruteForceSearch(char *t, char *p) {
int i = 0;
int j = 0;
int t_Len = strlen(t);//求出字符擦混长度
int p_Len = strlen(p);
while (i < t_Len&&j < p_Len) {
if (t[i + j] == p[j]) {
j++;//如果匹配,j右移
}
else {
//否则,i向右移动,j回溯到0;
i++;
j = 0;
}
}
if (j >= p_Len) {
//如果j到达了末尾,说明全部匹配,返回i的位置,就是目标位置
return i;
}
return -1;