LeetCode 344.Reverse String
题意:
Write a function that takes a string as input and returns the string reversed. Example: |
实现字符串的反转。
刚开始时,我是直接string fan,然后给fan赋值,发现是输出的是空的字符串。百思不得其解。之后使用char fan[length],然后再赋值,得到了反转的结果。但是少考虑了当s=“”时,输出结果不正确的情况。之后改正了错误,将fan初始化为s,之后再用for循环反转,得到了正确的答案。代码如下:
class Solution { public: string reverseString(string s) { int length = s.length(); string fan = s; for(int i = 0; i < length ; i++) fan[i] = s[length-1-i]; return fan; } };
代码的效率图如下:
果然比较笨的方法还是效率不高。
之后想string库里的reverse函数可能算法更好,效率更高,代码写成如下:
class Solution { public: string reverseString(string s) { reverse(s.begin(),s.end()); return s; } };
代码确实比较短,但是效率并没有得到提高,还是跟for循环的一样,说明reverse函数可能也是用循环写的。
然后想到循环可以剪短一半:
class Solution { public: string reverseString(string s) { int length = s.length(); for(int i = 0; i < length/2 ; i++) swap(s[i],s[length-1-i]); return s; } };
然而效果并不理想,还是跟原来一样。
查看了discuss,发现大部分的回答也就是这样。
总结:
这道题巩固了string的知识,在此之前还认为可以直接修改string类型的数据。