一、字符串简介
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组。
在C语言中字符串是一个char类型的数组,并且最后以’\0'结尾。
在C++中为字符串提供了一个string类,可以以操作数组的方式操作字符串,同时也提供了很多字符串的操作函数 :
- 1. 应用于查找的find()函数
- 2. 子串substr()函数
- 3. 替换replace()函数
- 4. 插入:insert()函数
- 5. 添加字符串:append()函数
- 6. 交换字符串:swap()函数
- 8. 字符串比较函数:compare()
与vector<char>相比,string的优势就在于这些函数。
二、经典题目总结
2.1 双指针法
344. 反转字符串、541.反转字符串Ⅱ、剑指offer05. 替换空格_清榎的博客-CSDN博客
344. 反转字符串中,双指针法一前一后很容易实现。
在541.反转字符串Ⅱ中,固定规律一段一段处理,在循环的条件上着手即可。
替换空格的问题同样还是使用双指针法在时间复杂度$O(n)$的情况下完成。其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
2.2 反转系列
151. 颠倒字符串中的单词、剑指Offer58-II.左旋转字符串_清榎的博客-CSDN博客
在151. 颠倒字符串中的单词 要求翻转字符串里的单词,这道题目可以说是综合考察了字符串的多种操作。是考察字符串的好题。
这道题目通过 先整体反转再局部反转,实现了反转字符串里的单词。
后来发现反转字符串还有一个牛逼的用处,就是达到左旋的效果。
在左旋转字符串中,我们通过先局部反转再整体反转达到了左旋的效果。
2.3 KMP算法
28. 实现strStr()、459. 重复的子字符串(KMP算法)_清榎的博客-CSDN博客
KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。
KMP的主要就在于前缀表 (也就是next数组的计算)。当i的后缀之后发生不匹配时,根据前缀表寻找到其前缀之后重新匹配即可。