a782 - 4. Redundant Acronym Syndrome Syndrome
題目描述
題目要求針對輸入的句子,產生一種特殊的縮寫,稱為 "Redundant Acronym Syndrome syndrome" (RAS syndrome)。這種縮寫的產生方式是:取每個單字的第一个字母(大写),然后将最后一个单词反转后附加到缩写后面。如果输入为 "END",则结束程序。
解題思路
程式碼的邏輯是逐行讀取輸入,直到遇到 "END" 為止。對於每一行輸入,程式首先提取每個單字的第一个字母,並轉換為大寫,形成縮寫的前半部分。然後,程式找到最後一個單字,將其反轉,形成縮寫的後半部分。最後,程式將縮寫的前半部分和後半部分連接起來,並輸出結果。
具體步驟如下:
- 讀取一行輸入。
- 如果輸入為 "END",則結束程式。
- 初始化兩個空字串
b和c,分別用於儲存縮寫的前半部分和後半部分。 - 遍歷輸入字串,如果遇到空格,則提取下一個單字的第一个字母,並轉換為大寫,添加到
b中。 - 找到最後一個單字,將其儲存在
c中,然後反轉c。 - 將
b和反轉後的c連接起來,輸出結果。 - 清空
c,準備處理下一行輸入。
複雜度分析
- 時間複雜度: O(n*m),其中 n 是輸入行數,m 是每行字串的長度。最壞情況下,需要遍歷每行字串以提取縮寫和反轉最後一個單字。
- 空間複雜度: O(m),其中 m 是每行字串的長度。空間主要用於儲存縮寫字串
b和c,以及輸入字串本身。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a,b,c;
bool last;
while(getline(cin,a)){
if(a!="END"){
for(int i=0;i<a.length();i++){
if(i==0){
b=a[0]-32;
cout << b;
}
if(a[i]==' '){
b=a[i+1]-32;
cout << b;
}
}
cout << " ";
for(int i=a.length()-1;i>=0;i--){
if(a[i]!=' '){
c+=a[i];
}
else{
break;
}
}
for(int i=c.length()-1;i>=0;i--){
cout << c[i];
}
c.clear();
cout << endl;
}
}
}