字符串刷题总结

一、字符串简介

字符串是若干字符组成的有限序列,也可以理解为是一个字符数组。

在C语言中字符串是一个char类型的数组,并且最后以’\0'结尾。

在C++中为字符串提供了一个string类,可以以操作数组的方式操作字符串,同时也提供了很多字符串的操作函数 :

与vector<char>相比,string的优势就在于这些函数。

二、经典题目总结

 2.1 双指针法

344. 反转字符串、541.反转字符串Ⅱ、剑指offer05. 替换空格_清榎的博客-CSDN博客 

344. 反转字符串中,双指针法一前一后很容易实现。

在541.反转字符串Ⅱ中,固定规律一段一段处理,在循环的条件上着手即可

替换空格的问题同样还是使用双指针法在时间复杂度$O(n)$的情况下完成。其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

2.2 反转系列

151. 颠倒字符串中的单词、剑指Offer58-II.左旋转字符串_清榎的博客-CSDN博客

151. 颠倒字符串中的单词 要求翻转字符串里的单词,这道题目可以说是综合考察了字符串的多种操作。是考察字符串的好题。

这道题目通过 先整体反转再局部反转,实现了反转字符串里的单词。

后来发现反转字符串还有一个牛逼的用处,就是达到左旋的效果。

在左旋转字符串中,我们通过先局部反转再整体反转达到了左旋的效果。

2.3 KMP算法

KMP算法解析_清榎的博客-CSDN博客

28. 实现strStr()、459. 重复的子字符串(KMP算法)_清榎的博客-CSDN博客 

KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。

KMP的主要就在于前缀表 (也就是next数组的计算)。当i的后缀之后发生不匹配时,根据前缀表寻找到其前缀之后重新匹配即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值