344. 反转字符串

题目

这道题很简单了,自己写的:

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

看了下卡哥思路,还是有值得学习的地方的,卡哥是从双指针角度来做的,我是直接从数组本身的结构来思考的。

按照卡哥思路的代码:

class Solution {
public:
    void reverseString(vector<char>& s) {
        for (int i = 0, j = s.size() - 1; i < j; i++, j--) {
            swap(s[i],s[j]);
        }
    }
};

补充:

swap的两种实现方法:

一种就是常见的交换数值:

int tmp = s[i];
s[i] = s[j];
s[j] = tmp;

一种就是通过位运算:

s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];

通过位运算的交换,不用定义临时变量,其原理如下:

img

img

通过位运算的交换的注意事项:
img

posted @ 2025-01-14 19:13  hisun9  阅读(7)  评论(0)    收藏  举报