LeetCode 344.Reverse String

题意:

Write a function that takes a string as input and returns the string reversed.

Example:
Given s = "hello", return "olleh".

实现字符串的反转。

刚开始时,我是直接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类型的数据。

 

posted @ 2016-07-30 23:08  Attenton  阅读(150)  评论(0编辑  收藏  举报