《数据结构与算法-Python语言描述》读书笔记(4)第4章字符串(关键词:数据结构/算法/Python/字符串)

第4章 字符串

4.1 字符集 、字符串和字符串操作

字符串可以看做是一类特殊的线性表,表中元素取自选定的字符集(如ASCII字符集或者Unicode字符集)。

4.1.1 字符串的相关概念

与字符串有关的一些主要概念:
- 字符串的长度
- 字符在字符串里的位置
- 字符串相等
- 字典序(读者笔记:完整概念见书上。这里写下我的理解:
就是两个字符串,从左向右看,比较它们下标相同的各对字符,遇到第一对不同字符的字符序,就决定了这两个字符串的顺序。举两个例子吧:
abc < abcd,虽然abc和abcd的前3个字符相同,但后者较长。
abc < add,虽然abc和add两个字符串的长度相同,但后者的第2个字符比前者大。

- 字符串拼接:Python语言里加号(+)可以用来表示字符串的拼接。
- 子串关系:(读者笔记:完整解释见书上。)空串是任何一个字符串的子串;任何字符串也是其自身的子串。
- 前缀和后缀是两种特殊子串:
- 其他有用的串运算如:拼接、串替换。
与字符串有关的一些研究
(s1 + s2) + s3 = s1 + (s2 + s3)

4.1.2 字符串抽象数据类型

Python中,字符串定义为一种不变数据类型。下面是一个简单的字符串ADT,其中定义了一些字符串操作:
这里写图片描述

4.2 字符串的实现

4.2.1 基本实现问题和技术

字符串是字符的线性序列,可以采用线性表的各种实现技术实现,用顺序表或链接表的形式表示。
这里写图片描述
(读者笔记:书上这里分析的很详细,建议仔细看书。)

4.2.2 实际语言里的字符串
4.2.3 Python的字符串

(读者:书上分析的很详细!!)

4.3 字符串匹配(子串查找)

4.3.1 字符串匹配
应用
  • 使用编辑器时,在文本中查找单词或句子,程序里找拼写错误
  • 对于Email服务器和客户端的程序的垃圾邮件过滤器
  • 谷歌等搜索引擎。。
  • 防病毒软件。。
实际的串匹配问题
4.3.2 串匹配和朴素匹配算法
串匹配算法
朴素的串匹配算法

最简单的朴素匹配算法采用最直观可行的策略:
①从左到右逐个字符匹配;
②发现不匹配时,转去考虑目标串里的下一个位置是否与模式串匹配。
(读者:抄代码。。)

def naive_matching(t, p):
    m, n = len(p), len(t)
    i, j = 0, 0
    while i < m and j < n:         # i==m说明找到匹配
        if p[i] == t[j]:           # 字符相同:考虑下一对字符
            i, j = i + 1, j + 1
        else:                      # 字符不同!考虑t中下一位置
            i, j = 0, j - i + 1
    if i == m:                     # 找到匹配,返回其开始下标
        return j - i
    return -1                      # 无匹配,返回特殊值

(读者笔记:原书中,对朴素的串匹配算法的缺点进行了分析,值得一读。)

4.3.3 无回溯串匹配算法(KMP算法)

(读者笔记:高能预警!!!这个算法比较复杂,不太容易理解!!!)

基本考虑

(读者笔记:好好看书上的分析!!!)

问题分析

(读者笔记:没看懂。。)

KMP算法
<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值