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), 只用到了常数个变量。