字符串 [BF算法] --->字符串

<如果您对数据结构和算法感兴趣或者是iOS工作者,欢迎大家加入学习交流群:QQ529560119>

先来说一下“串”这样的数据结构:

定义:1.串(String是由零个或多个字符组成的有限序列,又名叫字符串)。2.一般记为s = “a1a2a3...an”(n>=0) 。3.串可以是空串,即没有字符,直接由“”表示(注意里面没有空格哦)。

子串和主串,例如“FishC”是“FinshC.com”的子串,反之则倒过来。

字符串的比较

字符串的比较跟传统的数字比较有点差别,很容易我们可以知道2比1大,可要是“FinshC“和”fishc.com“呢?要怎么比较?比较长短?比大小?

比大小!没错。比的就是字符串里每个字符的ASCII码大小,因为”F“==70 “f” == 102,“f”>F,所以“fishc.com”>"FishC"。

不过这样比较没什么意义,字符串的比较我们更重视是否相等。

字符串的存储结构

字符串的存储结构与线性表相同,也分顺序存储结构和链式存储结构。

字符串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。

按照预定义的大小,为每个定义的字符串变量分配一个固定长度的存储区,一般用定长数组来定义。

与线性表相似,既然是固定长度的存储区,就存在一个空间分配不灵活的问题,那么会考虑用链式存储结构。


BF算法

BF算法原名Brute Force,BF算法属于朴素的模式匹配算法,它的核心思想是:

-有两个字符串S和T,长度为N何M。首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止。若S[1]和T[1]不等,则T向右移动一个字符的为止,再依次进行比较。

-该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)。

假设我们要从主串S=“ILoveFishC.com”找到T=“FishC”这个子串的位置,按照BF算法,我们需要进行下边的步骤

字符串 [BF算法] --->字符串_第1张图片

字符串 [BF算法] --->字符串_第2张图片

如果相等 依次比较:

字符串 [BF算法] --->字符串_第3张图片

最后匹配到找到子串。其实BF算法还是很简单的,在iOS中,从一个字符串A中截图一段字符串B子串内部应该就是这种实现,只不过苹果帮我们封装好了具体的方法了。

你可能感兴趣的