题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
思路:看到这个题,我第一想法是直接用内置函数不就好了(面试官叫我滚出去)在网上找到的正确刷力扣题不使用库函数的文章,分享记录一下。
然后我思索了一下,自己实现一下字符串反转就OK啦,因为题目要求原地修改,不可使用额外空间,所以for循环前后交换一下即可。for循环一半数组长度,声明一个char类型的temp变量,前后部分数组交换数据就大功告成了。
基于上述思想,代码如下:
void reverseString(vector<char>& s) {
char temp;
for(int i = 0;i < s.size()/2;i++){
temp = s[i];
s[i] = s[s.size()-i-1];
s[s.size()-i -1] = temp;
}
}
代码还算可以,用时超过58%的提交者。
后面,我想代码能不能再简洁一点,for循环里不就是swap()函数嘛,所以,我直接将for循环中直接使用了swap()函数,当然也可以运行,代码如下:
void reverseString(vector<char>& s) {
for(int i = 0;i < s.size()/2;i++){
swap(s[i],s[s.size()-i -1]);
}
}
但是执行时间比自己写的交换函数慢了4ms,如下图:
我猜想是因为需要在c++中去查找swap函数,所以花费了一些时间,然而我查找数据后,发现并非如此,c++内置函数明明要快很多,但为什么我会出现这个情况呢?
后来我又猜想,可能是在力扣上写代码,毕竟不是真的编译器,力扣引用查找库函数,可能需要花费一些时间,之后在网上翻找了很久没有找到原因,如果有知道的uus,就告诉我一下🥰就当日行一善了。
总结:今天的题很简单,但是引发了我一些思考,希望这样的思考多一些,可以促进我的成长。
hard题我唯唯诺诺,easy题我重拳出击。