Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitea689c7

Browse files
Update
1 parent8f905ff commitea689c7

File tree

2 files changed

+78
-12
lines changed

2 files changed

+78
-12
lines changed

‎README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
*[双指针法:一样的道理,能解决四数之和](https://mp.weixin.qq.com/s/nQrcco8AZJV1pAOVjeIU_g)
4343
*[数组:每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q)
4444
*[数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA)
45+
*[数组:滑动窗口拯救了你](https://mp.weixin.qq.com/s/UrZynlqi4QpyLlLhBPglyg)
46+
*[数组:这个循环可以转懵很多人!](https://mp.weixin.qq.com/s/KTPhaeqxbMK9CxHUUgFDmg)
4547
* 精选链表相关的面试题
4648
* 精选字符串相关的面试题
4749
* 精选栈与队列相关的面试题

‎problems/0344.反转字符串.md

Lines changed: 76 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,70 @@
11
##题目地址
22
https://leetcode-cn.com/problems/reverse-string/
33

4-
##思路
4+
>打基础的时候,不要太迷恋于库函数。
55
6-
一些同学直接用C++里的一个库函数 reverse,调一下直接完事了, 相信每一门编程语言都有这样的库函数,但是如果这么做题的话,这样大家不会清楚反转字符串的实现原理了。
6+
#题目:344. 反转字符串
77

8-
那么如果在现场面试中,我们什么时候使用库函数,什么时候不要用库函数呢
8+
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出
99

10-
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数,毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python 和 java 的同学更需要注意这一点,因为python java 提供的库函数十分丰富
10+
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题
1111

12-
如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
12+
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
13+
14+
示例 1:
15+
16+
输入:["h","e","l","l","o"]
17+
输出:["o","l","l","e","h"]
18+
示例 2:
19+
20+
输入:["H","a","n","n","a","h"]
21+
输出:["h","a","n","n","a","H"]
22+
23+
24+
#思路
25+
26+
先说一说题外话:
27+
28+
对于这道题目一些同学直接用C++里的一个库函数 reverse,调一下直接完事了, 相信每一门编程语言都有这样的库函数。
29+
30+
如果这么做题的话,这样大家不会清楚反转字符串的实现原理了。
31+
32+
但是也不是说库函数就不能用,是要分场景的。
33+
34+
如果在现场面试中,我们什么时候使用库函数,什么时候不要用库函数呢?
35+
36+
**如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。**
37+
38+
毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。
39+
40+
**如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。**
41+
42+
建议大家平时在leetcode上练习算法的时候本着这样的原则去练习,这样才有助于我们对算法的理解。
43+
44+
不要沉迷于使用库函数一行代码解决题目之类的技巧,不是说这些技巧不好,而是说这些技巧可以用来娱乐一下。
45+
46+
真正自己写的时候,要保证理解可以实现是相应的功能。
47+
48+
接下来再来讲一下如何解决反转字符串的问题。
1349

14-
建议我们平时在leetcode上练习算法的时候本着这样的原则去练习,这样才有助于我们对算法的理解
50+
大家应该还记得,我们已经讲过了[206.反转链表](https://mp.weixin.qq.com/s/pnvVP-0ZM7epB8y3w_Njwg)
1551

16-
接下来我们再来讲一下如何解决反转字符串的问题。
52+
在反转链表中,使用了双指针的方法。
1753

18-
这道题目遍历数组的前一半,同时和后一半做交换就可以了。
54+
那么反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。
55+
56+
因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。
57+
58+
如果对数组和链表原理不清楚的同学,可以看这两篇,[关于链表,你该了解这些!](https://mp.weixin.qq.com/s/ntlZbEdKgnFQKZkSUAOSpQ)[必须掌握的数组理论知识](https://mp.weixin.qq.com/s/X7R55wSENyY62le0Fiawsg)
59+
60+
对于字符串,我们定义两个指针(也可以说是索引下表),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。
61+
62+
以字符串`hello`为例,过程如下:
1963

2064
<imgsrc='../video/344.反转字符串.gif'width=600> </img></div>
2165

22-
C++代码如下:
66+
不难写出如下C++代码:
67+
2368
```
2469
void reverseString(vector<char>& s) {
2570
for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {
@@ -28,16 +73,22 @@ void reverseString(vector<char>& s) {
2873
}
2974
```
3075

31-
循环里只要做交换s[i] 和s[j]操作就可以了,那么我这里使用了swap 这个库函数,因为知道交换函数如何实现, 而且库函数仅仅是解题中的一部分, 所以这里使用库函数也是可以的。 swap可以有两种实现。
76+
循环里只要做交换s[i] 和s[j]操作就可以了,那么我这里使用了swap 这个库函数。大家可以使用。
77+
78+
因为相信大家都知道交换函数如何实现,而且这个库函数仅仅是解题中的一部分, 所以这里使用库函数也是可以的。
79+
80+
swap可以有两种实现。
81+
82+
一种就是常见的交换数值:
3283

33-
一种就是常见的交换数值。
3484
```
3585
int tmp = s[i];
3686
s[i] = s[j];
3787
s[j] = tmp;
3888
3989
```
40-
一种就是通过位运算。
90+
91+
一种就是通过位运算:
4192

4293
```
4394
s[i] ^= s[j];
@@ -46,6 +97,19 @@ s[i] ^= s[j];
4697
4798
```
4899

100+
这道题目还是比较简单的,但是我正好可以通过这道题目说一说在刷题的时候,使用库函数的原则。
101+
102+
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
103+
104+
如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
105+
106+
本着这样的原则,我没有使用reverse库函数,而使用swap库函数。
107+
108+
**在字符串相关的题目中,库函数对大家的诱惑力是非常大的,因为会有各种反转,切割取词之类的操作**,这也是为什么字符串的库函数这么丰富的原因。
109+
110+
相信大家本着我所讲述的原则来做字符串相关的题目,在选择库函数的角度上会有所原则,也会有所收获。
111+
112+
49113
##C++代码
50114

51115
```

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp