LeetCode【#344】Reverse String

题目链接:

点击跳转

 

题目:

Write a function that reverses a string. The input string is given as an array of characters char[].

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

You may assume all the characters consist of printable ascii characters.

 

Example 1:

Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Example 2:

Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]

题目分析:

给定一个字符数组,然后将其反转。

 

解题思路:

思路一:

将一个vector 中的元素进行反转,参考C++的vector用法,里面提到一个重要的算法,可以将vector 的元素进行反转,即使用reverse() 函数。

思路二:

如果不能用现成的函数来操作,那样怎么办呢?

我们可以遍历字符数组的前半部分,对每一个字符进行与之对称位置的字符互换值。

可以利用中间变量,如:temp = a, a = b, b = temp

这样子的操作来进行互换。

思路三:

思路三其实思路二的进展,就是我们可不可以不用一个中间变量来进行换值处理。答案是可以的,即我们可以利用 异或运算 将两个值进行互换,具体可以参考我的另一篇博客:异或运算实现两个数的交换

最后我将三个思路的运行结果附在代码最下面,方便比较。

 

AC代码:

思路一:

class Solution {
public:
    void reverseString(vector<char>& s) {
        reverse(s.begin(),s.end());
        return;
    }
};

思路二:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int len = s.size();
        char temp;
        for(int i = 0;i < len/2;i++)
        {
            temp = s[i];
            s[i] = s[len-1-i];
            s[len-1-i] = temp;
        }
        return;
    }
};

思路三:

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

 

运行结果:

思路一:

Runtime: 52 ms, faster than 92.73% of C++ online submissions for Reverse String.

Memory Usage: 15.4 MB, less than 63.34% of C++ online submissions for Reverse String.

思路二:

Runtime: 52 ms, faster than 92.73% of C++ online submissions for Reverse String.

Memory Usage: 15.2 MB, less than 71.83% of C++ online submissions for Reverse String.

思路三:

Runtime: 44 ms, faster than 98.55% of C++ online submissions for Reverse String.

Memory Usage: 15.3 MB, less than 65.79% of C++ online submissions for Reverse String.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值