NC103 反转字符串
1. 倒过来加
思路比较简单,遍历字符串,把每个字符往前加就行了。
class Solution {
public:
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
string solve(string str) {
string res;
for (auto c:str) res = c+res;
return res;
}
};- 时间复杂度:字符串的长度为n,时间复杂度为O(n),因为遍历了一次。
- 空间复杂度:O(n). 定义了一个长度也为n的变量res。
2. 双指针就地翻转
如图所示,定义两个指针分别从头和尾遍历,每次交换str[i]和str[j]就可以了。
class Solution {
public:
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
string solve(string str) {
int i = 0, j = str.size()-1;
while (i<j) {
swap(str[i++], str[j--]);
}
return str;
}
};- 时间复杂度:字符串的长度为n,时间复杂度为O(n),因为只遍历了半条字符串,因此常数是思路一的一半。
- 空间复杂度:O(1), 只用到了常数个变量。

京公网安备 11010502036488号