大话数据结构——串

串(string)是由零个或多个字符组成的有限序列,又名字符串。
字符串有很多函数,replace、ToUpper、ToLower(转小写)、Trim(去掉两边空格)、IndexOf(从左到右查找子串的位置)、SubString、SubLength等等。

一、串的存储结构

串的存储结构与线性表相同,分为顺序存储结构和链式存储结构。
1. 顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。
用“\0”来表示串的终结,不计入串长度,但是计入数组长度。
两个长度不同的串不可能相等。
2. 链式存储结构
要考虑一个结点是存放一个字符(会造成很大的空间浪费)还是多个字符。除了链接串与串的操作有一定方便外,总的来说不如顺序存储量或,性能也不如顺序存储结构好。

二、朴素的模式匹配算法

串的模式匹配:串的定位操作。
时间复杂度:O(1)–最好;O(n+m)–平均;O(n-m+1)*m–最不好

三、KMP模式匹配算法

KMP算法可以大大减少重复遍历的情况。
next数组(改进朴素匹配):后面一个与前面一个字符比较,若相等,k值是2,两个字符k值是3,n个k值相等就是n+1。第一个为0,其他不匹配的情况为1。
nextval数组(改进的KMP匹配):先计算next数组,逐个字符比较,若相等,nextval[j]=nextval[j],若不等,推倒重新比较,nextval[j]=next[i]。

三、题目

  1. n 个字符构成的字符串,假设每个字符都不一样,问有多少个子串?
    n(n+1)/2 + 1
  2. 设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值