这道题很简单了,自己写的:
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];
通过位运算的交换,不用定义临时变量,其原理如下:
通过位运算的交换的注意事项: