【数据结构】-串-模式匹配(字符串匹配)-BF算法与KMP算法

bf算法和kmp算法解决模式匹配问题时有以下不同点,关于kmp中next数组具体如何产生需要读者去看一下书,在具体的考试中,很少会设计到kmp算法的实现,但是next如何构造是一定要清楚的,next的公式要牢记于心 

【数据结构】-串-模式匹配(字符串匹配)-BF算法与KMP算法_第1张图片【数据结构】-串-模式匹配(字符串匹配)-BF算法与KMP算法_第2张图片

下面以这个为例,实现算法,在编程的过程中需要注意,算法规定从下标为1的位置开始存储字符,所以在处理字符串长度的时候不能直接用,输入字符串的时候也要注意第0个位置上不能存储有效字符

【数据结构】-串-模式匹配(字符串匹配)-BF算法与KMP算法_第3张图片

int index(string s, string t, int pos) {
	int j = 1; 
	int i = pos;
	int slen = s.length() - 1;
	int tlen = t.length() - 1;
	while (i<= slen &&j<= tlen)
	{
		if (s[i] == t[j]) {
			++i;
			++j;
		}
		else {
			i = i-j + 2;
			j = 1;
		}
	}
	if (j > tlen)return i - tlen;
	else return 0;
}


void get_next(string t, int next[]) {//只和模式串有关系
	int i = 1, j = 0;
	next[1] = 0;
	int tlen = t.length() - 1;
	while (i tlen)return i - tlen;
	else return 0;
}
int main()
{
	string s;
	string t;
	int pos;
	cout << "请输入主串:";
	cin >> s;
	cout << "请输入子串:";
	cin >> t;
	cout << "请输入搜索起始位置:";
	cin >> pos;
	cout << "BF模式匹配:" << index(s, t, pos) << endl;
	cout << "KMP模式匹配:" << index_kmp(s, t, pos);
}

 

你可能感兴趣的:(王道数据结构,串)