目录
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"]
我的解法
定义两个迭代器,一个从前往后,一个从后往前,并互换两个迭代器指向地址中的值
class Solution {
public:
void reverseString(vector<char>& s) {
int halfLength=s.size()/2;
int num=0;
char temp=' ';
vector<char>::iterator itz=s.begin();
for (vector<char>::iterator itd=s.end();itd!=s.begin()&&num<halfLength;){
itd--;
temp=*itd;
*itd=*itz;
*itz=temp;
itz++;
num++;
}
}
};
高票C++解法
class Solution {
public:
string reverseString(string s) {
int i = 0, j = s.size() - 1;
while(i < j){
swap(s[i++], s[j--]); //命名空间std中带的函数
}
return s;
}
};
高票java 解法
public class Solution {
public String reverseString(String s) {
char[] word = s.toCharArray();
int i = 0;
int j = s.length() - 1;
while (i < j) {
//两次异或同一个值,则不变。如下三行的优点是不用再声明一个新的临时变量了。
word[i] = (char) (word[i] ^ word[j]);
word[j] = (char) (word[i] ^ word[j]);
//word[j]=(char)(word[i]^word[j]^word[j]),因此为word[i]
word[i] = (char) (word[i] ^ word[j]);
i++;
j--;
}
return new String(bytes);
}
}