1

Description

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

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

My solution

第一次方案为新开辟一个str,每次str=s[i]+str, 报错为内存超过限制.
故改用如下in place的方式:

class Solution {
public:
    string reverseString(string s) {
        int size=s.size();
        for(int i=0;i<size/2;i++){
            s[i]^=s[size-i-1];
            s[size-i-1]^=s[i];
            s[i]^=s[size-i-1];
        }
        return s;        
    }
};

Discuss

discuss中发现思路跟我的类似, 但是具体代码写法有所不同, 实际上比我的效率和可理解要好:

class Solution {
public:
    string reverseString(string s) {
        int i = 0, j = s.size() - 1;
        while(i < j){
            swap(s[i++], s[j--]); 
        }
        return s;
    }
};

采用两头的两个指针i,j进行向中间夹逼. 效率上而言,我的要做减法,效率低一些.这道题还看不出两种写法具体优劣, 参见leetcode 345, 用方式2就很条理清晰了.

Reference


xufeng
8 声望3 粉丝

有多少人工就有多少智能