神奇少年的数据结构学习笔记四(串)

串的定义:零个或多个字符组成的有限序列,又称字符串。

1.串的比较 

 比较字符串之间的ASCII码的大小, 比如s="happy",t="happen",因为前面4个字母相同,所以比较第五位的字母的ASCII码值,

y的ASCII码值是121,e的ASCII码值是101,121>101所以串s>t.  英语词典就是按着这样排列的。

2.朴素的模式匹配算法

在一篇文章中找一个单词,这种子串的定位操作通常称为串的模式匹配。

对主串的每一个字符作为子串开头,与要匹配的字符串进行匹配,对主串大循环,每个字符开头做子串长度的小循环,直到匹配成功或全部遍历完成

最好的情况比如 “abcabd”与“abc”第一次就匹配到了,时间复杂度为O(1)

其次就是上图的情况:时间复杂度为O(n+m)   n为主串长度 m 子串长度

极端情况: “0000000000000000000000000001”与“000000000001”,每次匹配时,都要循环到子串的最后一位才发现不匹配

时间复杂度 O[(n-m+1)*m]

3.KMP模式匹配算法

由于朴素模式匹配算法的低效,Knuth-Morris-Pratt 字符串查找算法(简称“KMP”)是一种最常见的改进算法,由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。

这一部分可能有点复杂,不好用文字表述,最好去b站或者慕课网这种学习类网站找一个视频看看,就很好懂了

https://www.bilibili.com/video/av11866460?from=search&seid=2084575193725296150

附一个b站的链接

该文章也写的很好,放出来给大家学习

https://blog.csdn.net/qq_35644234/article/details/55806885  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章