题目的主要信息:
- 一个字符串的内容颠倒过来,并输出
- 输入可能有空格
方法一:库函数
具体做法:
输入可能有空格因此我们用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;
}
复杂度分析:
- 时间复杂度:,reverse函数的复杂度为
- 空间复杂度:,无额外空间
方法二:双指针
具体做法:
准备两个指针,从字符串一首一尾同时出发,每次交换二者指向的字符,直到二者相遇,这样刚好可以将字符串首尾交换,完成反转。
#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;
}
复杂度分析:
- 时间复杂度:,其中为字符串长度,一共循环次
- 空间复杂度:,两个指针,常数空间