题目的主要信息:

  • 一个字符串的内容颠倒过来,并输出
  • 输入可能有空格

方法一:库函数

具体做法:

输入可能有空格因此我们用getline函数读取一行字符串,然后调用reverse函数从字符串首到尾直接颠倒。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main(){
    string s;
    while(getline(cin, s)){
        reverse(s.begin(), s.end()); //库函数逆序
        cout << s << endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n),reverse函数的复杂度为O(n)O(n)
  • 空间复杂度:O(1)O(1),无额外空间

方法二:双指针

具体做法:

准备两个指针,从字符串一首一尾同时出发,每次交换二者指向的字符,直到二者相遇,这样刚好可以将字符串首尾交换,完成反转。

alt

#include<iostream>
#include<string>
using namespace std;

int main(){
    string s;
    while(getline(cin, s)){
        int left = 0; // 首尾双指针
        int right = s.length() - 1;
        while(left < right) //指针中间靠
            swap(s[left++], s[right--]); //相互交换位置
        cout << s << endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(n)O(n),其中nn为字符串长度,一共循环n/2n/2
  • 空间复杂度:O(1)O(1),两个指针,常数空间