反转字符串

87 阅读2分钟

题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

思路:看到这个题,我第一想法是直接用内置函数不就好了(面试官叫我滚出去)在网上找到的正确刷力扣题不使用库函数的文章,分享记录一下。

QQ图片20230424222644.png

然后我思索了一下,自己实现一下字符串反转就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%的提交者。

image-20230424220149136.png

后面,我想代码能不能再简洁一点,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,如下图:

image-20230424221314727.png

我猜想是因为需要在c++中去查找swap函数,所以花费了一些时间,然而我查找数据后,发现并非如此,c++内置函数明明要快很多,但为什么我会出现这个情况呢?

image-20230424222022102.png

后来我又猜想,可能是在力扣上写代码,毕竟不是真的编译器,力扣引用查找库函数,可能需要花费一些时间,之后在网上翻找了很久没有找到原因,如果有知道的uus,就告诉我一下🥰就当日行一善了。

总结:今天的题很简单,但是引发了我一些思考,希望这样的思考多一些,可以促进我的成长。

hard题我唯唯诺诺,easy题我重拳出击。