题目要求
Write a function that takes a string as input and returns the string reversed.
Example:
Given s = "hello", return "olleh".
LeetCode 344平台
问题描述
编写一个函数,将字符串s作为输入参数,输出s逆序的字符串。例如:给定输入字符串
s = "hello", 则返回输出字符串 "olleh"。
思路分析
从字符串首部、尾部分别向中心位置进行遍历,每次交换首尾的字符,直到首部下标
大于等于尾部下标
代码验证
class Solution {
public:
string reverseString(string s) {
string ret = s;
for (int i = 0, j = ret.size() - 1; i < j; ++i, --j) {
char s = ret[i];
ret[i] = ret[j];
ret[j] = s;
}
return ret;
}
};
上述代码中通过定义了一个临时变量s用作交换ret[i]和ret[j]的值,这里又可以引出另一个有意思的
问题:能够不引人临时变量完成两个char或者int的交换? 显然是可以的,通过双目运算符 + 或者 ^
都可以实现不引人临时变量完成交换。
operation | result |
---|---|
a = a ^ b | a = a ^ b |
b = a ^ b | b = (a ^ b) ^ b = a ^ (b ^ b) = a |
a = a ^ b | a = (a ^ b) ^ a = a ^ b ^ a = b |
===========================================
operation | result |
---|---|
a = a + b | a = a + b |
b = a - b | b = (a + b) - b = a |
a = a - b | a = (a + b) - a = b |
因此,如果不引入临时变量实现的交换函数如下:
void swap(char& a, char& b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
总结注意
需要反转一个字符串时,采用首尾置换法,将str[0] 和 str[size-1] 进行依次交换,这样效率高
原创声明
作者:hgli_00
链接:http://www.cnblogs.com/lihuagang/p/6740414.html
来源:博客园
著作权归作者所有,转载请联系作者获得授权。