leetcode-master/problems/0344.反转字符串.md

2.2 KiB
Raw Blame History

题目地址

https://leetcode-cn.com/problems/reverse-string/

思路

一些同学直接用C++里的一个库函数 reverse调一下直接完事了 相信每一门编程语言都有这样的库函数,但是如果这么做题的话,这样大家不会清楚反转字符串的实现原理了。

那么如果在现场面试中,我们什么时候使用库函数,什么时候不要用库函数呢。

如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数,毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python 和 java 的同学更需要注意这一点因为python java 提供的库函数十分丰富。

如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

建议我们平时在leetcode上练习算法的时候本着这样的原则去练习这样才有助于我们对算法的理解。

接下来我们再来讲一下如何解决反转字符串的问题。

这道题目遍历数组的前一半,同时和后一半做交换就可以了。

C++代码如下:

void reverseString(vector<char>& s) {
    for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {
        swap(s[i],s[j]);
    }
}

循环里只要做交换s[i] 和s[j]操作就可以了那么我这里使用了swap 这个库函数,因为知道交换函数如何实现, 而且库函数仅仅是解题中的一部分, 所以这里使用库函数也是可以的。 swap可以有两种实现。

一种就是常见的交换数值。

int tmp = s[i];
s[i] = s[j];
s[j] = tmp;

一种就是通过位运算。

s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];

C++代码

class Solution {
public:
    void reverseString(vector<char>& s) {
        for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {
            swap(s[i],s[j]);
        }
    }
};

更过算法干货文章持续更新可以微信搜索「代码随想录」第一时间围观关注后回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等就可以获得我多年整理的学习资料。