type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
本文部分参考了代码随想录中的内容,如有侵权请谅解。
📝基础理论
字符串的定义
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。
在C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。
例如这段代码:
在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用'\0'来判断是否结束。
例如这段代码:
string和vector<char>的区别
在底层没有区别,只不过我们平时一般都是用 string,因为 string 不但重载了各种算数运算符,同时也提供了大量有关字符串操作的接口。
🤗题型
反转字符串
反转字符串这道题考察了C++中字符串库函数reverse的实现。很容易想到使用双指针,一个从前向后遍历,一个从后向前遍历,使用swap进行不断地交换。
反转字符串2是上一题的进阶版本,我们要学会分析。使用模拟的方法,弄清楚哪些需要反转,哪些不需要即可。
局部反转+整体反转
有些题目通过分析可以发现仍然属于反转字符串的变体。通过先整体反转,再局部反转,或者先局部反转,再整体反转的方法,可以解决这些问题。
KMP
这一类题目需要经常复习,主要解决字符串匹配的问题。相较于暴力解法,KMP的优势在于先构建了一个next数组,记录最长相等前后缀,用于处理当文本串与模式串冲突时需要回退的步数。
具体思路最好还是参考以下视频理解:
总结
至此,我们已经刷了4个模块的题目。接下来的第5个模块是“双指针法”专题,会涉及到很多之前在各个模块已经做过的题目。顺便把之前的内容重新复习一遍。
参考文章
Written by Aryue,editted by Notion AI.
- 作者:Aryue
- 链接:www.aryue.com/article/ade86df0-3aa7-485f-9504-6e76914fd55f
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章