字符串

首先,什么是字符串,是一种编程语言中的一种数据类型,和int ,float,double都是相同,作为一种信息的表示形式,在c中用的是char型,而c++中用的是cstring,这点不讨论这两个的区别,仅仅就是作为一种比较。

好了,字符串是什么东西呢,字符串是有零个和多个字符串组成的有限"子集",这个地方的有限是什么个概念呢,比如现在有{0,1}这一个集合,很明显生成的字符串集将是以0和1元素构成的全部元素的集合,这个可以说成是一种闭包运算(自反可传递的闭包),很显然,这个集合是自然数的等势,也就是这个集合是无限可数集合,但是就集合中元素的长度,因为元素是由0,1所构成的,所以在形式上长度是有限的,这个可以说成是一种集合扩展的结果,元素不断的增加,但是元素本身不和集合之间有任何联系。

有了字符串就要考虑它的用途,在internet中的搜索引擎是不是要我们输入一些字符,这个就可以看出字符串的作用了,大量用于网页和数据库中,所以对其的匹配算法的研究一直是很热门的项目。现在就说说一些简单的匹配算法,比如像kmp和bf等等,这二个是本文章重点说明的内容,

bf(朴素算法)

从字面上讲,就是用一个小字符串找到主串中是否有相同的字符串,假设不相同的在模式串的最后,这可以将算法描述成

1、将s(主串)和t(模式)用数组的下标完成,也就是所谓的指针,对于为什么可以说成指针,这个是编译器的事情了,不在这点说明了。

2、如果s[i]=t[j],则是匹配的,将i和j下移至i+1和j+1,继续进行匹配,如同不同,则将i像前回溯,j向后回溯。

3、直到全部的主串匹配完成,否则,推出匹配算法。

kmp

仅仅是加入了一个next,这个next代表了模式串中的有几个和其相匹配的子串个数,这样就可以在时间复杂程度上(此仅仅为程序上的问题)可以缩小到n。当不匹配时就将模式串的指针回溯到当前所指向的next的位置,就可以继续查找。

代码就不在这点贴出来了,仅仅是完成一个思维上的洗礼。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值