KMP 算法

1、字符串中包含子串

描述:给定一个字符串 A,要求在 A 中查找一个子串 B

方法一:利用 string 的一些函数,比如 find(),substr() 等。

int findstr(string str, string substr)
{
	assert(!str.empty() && !substr.empty());  // 断言,必不可少
	int length_str = str.size();
	int length_substr = substr.size();

	if (length_str < length_substr)
		return NULL;
	else
	{
		int index = str.find(substr);
		
		return index;  // 返回子串在原串中的下标
	}

}

int main()
{
	string str = "ababcabcacbab";
	string sub = "abcac";
	//int index = str.find(s);
	//cout << str[index];

	int index = findstr(str,sub);
	cout << index;
	return 0;
}

方法二:BF(Brute Force )算法一种暴力算法,串匹配算法。

与第一种算法的不同之处在于:(1)使用 char*(2)没有使用库函数,直接暴力匹配

代码:

int strFind(char* string, char* substring)
{
	assert(string != NULL && substring != NULL);
	int m = strlen(string);
	int n = strlen(substring);
	int j = 0;

	if (m < n)
		return NULL;
	for (int i = 0; i < m - n; i++)
	{
		for ( j = 0; j < n; j++)
		{
			if (string[i + j] != substring[j]) // 一一比对,如果有一个不相同,就跳出内层循环,重新比对
				break;
		}
		if (j == n)
			return i; // 返回原串中第一次出现子串的下标
	}

	return NULL;
}

int main()
{
	char* str = "ababcabcacbab";
	char* sub = "abcac";
	//int index = str.find(s);
	//cout << str[index];

	//int index = findstr(str,sub);
	//cout << index;

	int index = strFind(str,sub);
	cout << index;

	return 0;
}


方法三、KMP算法


明天再写。今天有点疲惫了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值