反转字符串

1、题意重述

写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

换句话说,就是对给定的字符串进行首尾交换操作。

2、思路整理

使用双指针的思想:

Step1:使用头指针和尾指针,分别指向字符串的开头和结尾。

alt

Step2:头尾指针进行元素交换,并更新头尾指针的位置。

alt

Step3:重复Step2,直到头尾指针相遇,最后得到答案。

alt

3、代码实现

class Solution {
public:
    string solve(string str) {
        int i = 0, j = str.length() - 1;
        while(i < j) 
        {
            swap(str[i++], str[j--]); //交换两端元素,并移动指针
        }
        return str;
    }
};

4、复杂度分析

时间复杂度:一次遍历,因此时间复杂度为O(N)O(N)

空间复杂度:使用了常数级内存地址空间,因此空间复杂度为O(1)O(1)