2.2 KiB
2.2 KiB
题目地址
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」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。