11
11
12
12
那么这次我们来做一个总结。
13
13
14
- # 什么是字符串
14
+ ## 什么是字符串
15
15
16
16
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。
17
17
@@ -42,7 +42,7 @@ for (int i = 0; i < a.size(); i++) {
42
42
所以想处理字符串,我们还是会定义一个string类型。
43
43
44
44
45
- # 要不要使用库函数
45
+ ## 要不要使用库函数
46
46
47
47
在文章[ 344.反转字符串] ( https://programmercarl.com/0344.反转字符串.html ) 中强调了** 打基础的时候,不要太迷恋于库函数。**
48
48
@@ -52,7 +52,7 @@ for (int i = 0; i < a.size(); i++) {
52
52
53
53
** 如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。**
54
54
55
- # 双指针法
55
+ ## 双指针法
56
56
57
57
58
58
在[ 344.反转字符串] ( https://programmercarl.com/0344.反转字符串.html ) ,我们使用双指针法实现了反转字符串的操作,** 双指针法在数组,链表和字符串中很常用。**
@@ -67,7 +67,7 @@ for (int i = 0; i < a.size(); i++) {
67
67
68
68
一些同学会使用for循环里调用库函数erase来移除元素,这其实是O(n^2)的操作,因为erase就是O(n)的操作,所以这也是典型的不知道库函数的时间复杂度,上来就用的案例了。
69
69
70
- # 反转系列
70
+ ## 反转系列
71
71
72
72
在反转上还可以在加一些玩法,其实考察的是对代码的掌控能力。
73
73
@@ -87,7 +87,7 @@ for (int i = 0; i < a.size(); i++) {
87
87
88
88
在[ 字符串:反转个字符串还有这个用处?] ( https://programmercarl.com/剑指Offer58-II.左旋转字符串.html ) 中,我们通过** 先局部反转再整体反转** 达到了左旋的效果。
89
89
90
- # KMP
90
+ ## KMP
91
91
92
92
KMP的主要思想是** 当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。**
93
93
@@ -110,7 +110,7 @@ KMP的精髓所在就是前缀表,在[KMP精讲](https://programmercarl.com/00
110
110
111
111
其中主要** 理解j=next[ x] 这一步最为关键!**
112
112
113
- # 总结
113
+ ## 总结
114
114
115
115
字符串类类型的题目,往往想法比较简单,但是实现起来并不容易,复杂的字符串题目非常考验对代码的掌控能力。
116
116
@@ -128,3 +128,4 @@ KMP算法是字符串查找最重要的算法,但彻底理解KMP并不容易
128
128
<a href =" https://programmercarl.com/other/kstar.html " target =" _blank " >
129
129
<img src =" ../pics/网站星球宣传海报.jpg " width =" 1000 " />
130
130
</a >
131
+
0 commit comments