第四章 串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37437983/article/details/82873790

1,串的定义

串:由零个或多个字符组成的有序序列。如s = ‘a1a2a3...an’(n>=0)

2,基本概念

  1. 串的长度:串中字符的数目n;
  2. 空串:零个字符的串。
  3. 串的相等:两个串的长度相等,各个对应位置的字符都相等。
  4. 空格串:有一个或多个组成的串‘ ’。
  5. 字串:串中任意个连续的字符组成的子序列。

3,串的存储方式

  3.1顺序存储

串中的字符被顺序的存储在内存中相邻的存储单元中。

与顺序表类似,顺序串是用一组地址连续的存储单元来存储串中的字符序列。

按其存储分配的不同可将顺序串分为如下两类:

  1. 静态存储分配的顺序串
  2. 动态存储分配的顺序串

  3.2堆分配存储

仍以一组空间足够大的地址连续的存储单元依次存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配的。

  3.3串的块链存储

为了便于进行串的操作,当以链表存储串值时,除头指针外还可附加一个尾指针指示链表中的最后一个结点,并给出当前串的长度,称如此定义的串存储结构为块链结构。

  3.4字符串常用操作

1,串长函数

int strlen(char *s)

2,串复制

char *strcpy(char *s1,char *s2)

3,串比较

int strcmp(char *s1,char *s2)

4,字符定位    //找c在字符串s中第一次出现的位置

char *strchar(char *s,char c)  //若找到,则返回该位置,否则返回NULL  

  3.5串的模式匹配

设有主串s和字串t,字串t的定位就是要在主串s中找到一个与字串t相等的字串。通常把主串s称为目标串,把字串t称为模式串。

next[0] = -1 意义:任何串的第一个字符的模式值规定为-1.

next[j] = -1 意义:模式串中下标为j的字符,如果与首字符相同,且j的前面1-k个字符与开头的1-k个字符不等。(1<=k<j)

next[j] = k 意义:模式串中下标为j的字符,如果j的前面k个字符与开头的k个字符相等。

 

KMP算法

KMP算法的时间复杂度为O(n+m)。效率高的主要原因是匹配失败时在主串中不需要回朔,在字串(模式串)中也不一定要回朔到第一个字符的位置。

猜你喜欢

转载自blog.csdn.net/qq_37437983/article/details/82873790
今日推荐