(第15天)字符串基础理论和题型总结

字符串基础理论

  1. 字符串的前世今生:
  • 在C语言中,字符串实际上是一个字符数组,把一个个字符存储在一个数组中,在末尾加上’\0’表示字符串的末尾。
  • 到了C++中,提供了string类,不以’\0’表示字符串的结束。同时,使用string类生成的字符串是可变长度,还提供了很多处理字符串的相关接口,例如:size()返回字符串的长度。
  1. 通用操作

不管是字符数组还是string类生成的字符串,都使用s[index]来访问元素的。

题型分类

关于字符串的题型主要分两类:

  • 对字符串的操作:字符串翻转、字符串替换、字符串的局部移动
  • 对字符串的匹配:在字符串中寻找目标子串、判断字符串是否由重复子串组成。

操作字符串

  1. 翻转字符串:翻转过程就是元素进行位置交换。

使用双指针法解决问题。
但要注意的是,双指针法在有些题中被用于降低时间复杂度,在有些题中别用于解决问题。
双指针有多种形态:快慢指针、双头指针(分别指向序列两头的指针)。

  1. 替换数字:string类字符串的扩容、双指针法。
  2. 局部字符串的移动:先整体翻转、再局部翻转

匹配字符串

  1. 在字符串中寻找目标子串:这里主要学习KMP算法。

KMP算法的核心

  • 前缀表:next数组的含义、求法、用法。
  • 匹配时使用前缀表进行回退操作。
  1. 判断字符串是否由重复子串组成:KMP算法的灵活应用。
  • 这里主要使用了前缀表中存储的最长公共前后缀长度进行条件判断。
  • 不过解题的重点是方法的推导。

总结

  • 对于字符串的操作考验了对代码的掌控能力,需要用双指针法、扩容等操作来解决问题。
  • 其中,对字符串的匹配一方面考察了对代码的掌控能力(暴力解法、KMP算法),另一方面考察了推导解决问题方法的能力(KMP算法)。
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值