题目链接:
题目:
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.