算法打卡day11 2023.1.18
题目描述
将一个英文语句以单词为单位逆序排放,例如“I am a boy”,逆序排放后为“boy a am I”,所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符,数据范围:输入的字符串长度满足:1 ≤n ≤ 1000
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母
输出描述:
得到逆序的句子
示例1
输入:I am a boy
输出:boy a am I
思路
利用栈先进后出的特点,输出后输入的单词,完成翻转句子。
具体实现
#include<iostream>
#include<string>
#include<algorithm>
#include <stack>
using namespace std;
int main(){
cout << "请输入:";
string s;
getline(cin, s);
int n = s.length();
stack<string> st;
for(int i = 0; i < n; i++){
int j = i;
while(j < n && s[j] != ' ')
j++;
st.push(s.substr(i, j - i));
i = j;
}
while(!st.empty()){
cout << st.top() << " ";
st.pop();
}
return 0;
}
时间复杂度
O(n)
小结
注意对库函数的利用,要熟悉和学会运用各种数据结构,根据题目的不同,在了解题目目标后,这题用先进后出的栈可以很快实现翻转。