leetcode 344. Reverse String

Description

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

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

My solution

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

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中发现思路跟个人相似, 可是具体代码写法有所不一样, 实际上比个人效率和可理解要好:blog

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就很条理清晰了.ip

Reference