10行代码AC——7-2 说反话-加强版 (20 分)——解题报告
生活随笔
收集整理的這篇文章主要介紹了
10行代码AC——7-2 说反话-加强版 (20 分)——解题报告
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
勵志用盡量少的代碼做高效的表達。
題目描述
給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。
輸入格式:
測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用若干個空格分開。
輸出格式:
每個測試用例的輸出占一行,輸出倒序后的句子,并且保證單詞間只有1個空格。
輸入樣例:
Hello World Here I Come
輸出樣例:
Come I Here World Hello
分析:
本題的實質是考察串的倒序運算。
解法1:STL容器中stack棧為容器操作。 定義string型棧,逐個存入單詞后,從棧頂依次輸出即為倒敘。優點是時間復雜度較小:O(n),缺點是代碼相對較長。
解法2:使用algorithm頭文件中的reverse()函數翻轉。 存入容器后,直接調用翻轉函數即可。優點是代碼簡潔,只有10行;缺點是時間復雜度較大:O(nlogn)。
傳送門1——>懶癌的福音——algorithm頭文件函數全集
強烈推薦讀者把兩種解法都嘗試一下,都是很常用的方法。
代碼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);} //需要注意的是:輸入結束要手動輸入^z作為結束標志 //zcout<<"!!!!!!!!!!"<<endl; 這里可以測試截止到目前為止代碼是否錯誤。while(!s.empty()){if(flag)cout<<" ";elseflag=true;cout<<s.top(); //輸出一個元素s.pop(); //移除一個元素}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函數總結:
empty() 堆棧為空則返回真
pop() 移除棧頂元素
push() 在棧頂增加元素
size() 返回棧中元素數目
top() 返回棧頂元素
擇苦而安,擇做而樂,虛擬現實終究比不上真實精彩之萬一。
總結
以上是生活随笔為你收集整理的10行代码AC——7-2 说反话-加强版 (20 分)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode算法刷题记录表
- 下一篇: 最优解法——7-3 将数组中的数逆序存放