10行代码AC——7-2 说反话-加强版 (20 分)——解题报告
勵(lì)志用盡量少的代碼做高效的表達(dá)。
題目描述
給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。
輸入格式:
測試輸入包含一個(gè)測試用例,在一行內(nèi)給出總長度不超過500 000的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區(qū)分)組成的字符串,單詞之間用若干個(gè)空格分開。
輸出格式:
每個(gè)測試用例的輸出占一行,輸出倒序后的句子,并且保證單詞間只有1個(gè)空格。
輸入樣例:
Hello World Here I Come
輸出樣例:
Come I Here World Hello
分析:
本題的實(shí)質(zhì)是考察串的倒序運(yùn)算。
解法1:STL容器中stack棧為容器操作。 定義string型棧,逐個(gè)存入單詞后,從棧頂依次輸出即為倒敘。優(yōu)點(diǎn)是時(shí)間復(fù)雜度較小:O(n),缺點(diǎn)是代碼相對較長。
解法2:使用algorithm頭文件中的reverse()函數(shù)翻轉(zhuǎn)。 存入容器后,直接調(diào)用翻轉(zhuǎn)函數(shù)即可。優(yōu)點(diǎn)是代碼簡潔,只有10行;缺點(diǎn)是時(shí)間復(fù)雜度較大:O(nlogn)。
傳送門1——>懶癌的福音——algorithm頭文件函數(shù)全集
強(qiáng)烈推薦讀者把兩種解法都嘗試一下,都是很常用的方法。
代碼1:stack棧解法
#include <iostream> #include <stack> #include <string> using namespace std; int main() {stack<string> s; //建立字符串型stack棧string sp; //聲明字符串bool flag=false; while(cin>>sp){s.push(sp);} //需要注意的是:輸入結(jié)束要手動(dòng)輸入^z作為結(jié)束標(biāo)志 //zcout<<"!!!!!!!!!!"<<endl; 這里可以測試截止到目前為止代碼是否錯(cuò)誤。while(!s.empty()){if(flag)cout<<" ";elseflag=true;cout<<s.top(); //輸出一個(gè)元素s.pop(); //移除一個(gè)元素}return 0; }代碼2:reverse()解法
#include<bits/stdc++.h> //萬能頭文件 using namespace std; int main() {vector<string>v; string s; while(cin>>s) v.push_back(s);reverse(v.begin(),v.end());for(int i = 0; i < v.size(); i++) cout << (i == 0 ? "" : " ") << v[i]; return 0; }stack函數(shù)總結(jié):
empty() 堆棧為空則返回真
pop() 移除棧頂元素
push() 在棧頂增加元素
size() 返回棧中元素?cái)?shù)目
top() 返回棧頂元素
擇苦而安,擇做而樂,虛擬現(xiàn)實(shí)終究比不上真實(shí)精彩之萬一。
總結(jié)
以上是生活随笔為你收集整理的10行代码AC——7-2 说反话-加强版 (20 分)——解题报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode算法刷题记录表
- 下一篇: 最优解法——7-3 将数组中的数逆序存放