Coursera北大《数据结构基础》之字符串

本文基于Coursera北大课程《数据结构基础》,所有文中非标注图片均来自课件,侵删

目录

1. 字符串基本概念

1.1 什么是字符串

1.2 字符编码

1.3 字符串数据类型

1.4 子串(substring)

2. 字符串的存储结构

3. 字符串运算的算法实现

4. 字符串的模式匹配(pattern matching)

4.1 朴素算法(Brute Force/Naive)

4.2 KMP快速模式匹配(Knuth-Morrit-Pratt)

4.2.1 字符串的特征向量定义

4.2.2 字符串的特征向量构造方法

参考资料



1. 字符串基本概念

1.1 什么是字符串

字符串是特殊的线性结构,即元素为字符的线性表。

设一个长度为N的字符串为S: "c0c1c2...cn-1",其中S为字符串串名,c0至cn-1则为串值,N为串长。

1.2 字符编码

在编码上,字符编码使用了单字节(8 bits)的ASCII码对128个符号进行编码;在更复杂的文字例如中文、日语、韩语字符时,使用UNICODE(16 bits)进行编码。判断字符串的大小是通过编码顺序判断的,字符编码表一般遵循约定俗成的“偏序编码规则”。

1.3 字符串数据类型

根据语言不同而不同,总体来说有简单类型和复合类型两种观念。

1.4 子串(substring)

子串就是从某个字符串中取出的一部分,而被取出的这个整体就是主串。

  • 空串是任意串的子串。
  • 任意串S都是S本身的子串。
  • 真子串:非空且不为自身的子串。

2. 字符串的存储结构

字符串存为链表没有什么很大的优势,因为其操作通常都是以串为单位进行的,所以字符串更多是顺序存储。

对于串长变化不大的字符串,有三种常见的处理方案:

  1. 用S[0]作为记录串长的存储单元(Pascal)。缺陷是只有一个字节的长度来存这个值,所以字符串整体长度不能超过2^8=256 bits
  2. 为存储串的长度另找一个存储地址。缺陷是串的最大长度是fixed,不能动态申请数组空间。
  3. 用一个特殊的末尾标记,在C或C++中用'\0','\0'等价于NULL(注意这个末尾结束符不占字符串本身声明长度)

Pascal是一个有影响的面向对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值