# String Manipulation# Greedy# Iteration

a782 - 4. Redundant Acronym Syndrome Syndrome

🔗 前往 ZeroJudge 原題

題目描述

題目要求針對輸入的句子,產生一種特殊的縮寫,稱為 "Redundant Acronym Syndrome syndrome" (RAS syndrome)。這種縮寫的產生方式是:取每個單字的第一个字母(大写),然后将最后一个单词反转后附加到缩写后面。如果输入为 "END",则结束程序。

解題思路

程式碼的邏輯是逐行讀取輸入,直到遇到 "END" 為止。對於每一行輸入,程式首先提取每個單字的第一个字母,並轉換為大寫,形成縮寫的前半部分。然後,程式找到最後一個單字,將其反轉,形成縮寫的後半部分。最後,程式將縮寫的前半部分和後半部分連接起來,並輸出結果。

具體步驟如下:

  1. 讀取一行輸入。
  2. 如果輸入為 "END",則結束程式。
  3. 初始化兩個空字串 bc,分別用於儲存縮寫的前半部分和後半部分。
  4. 遍歷輸入字串,如果遇到空格,則提取下一個單字的第一个字母,並轉換為大寫,添加到 b 中。
  5. 找到最後一個單字,將其儲存在 c 中,然後反轉 c
  6. b 和反轉後的 c 連接起來,輸出結果。
  7. 清空 c,準備處理下一行輸入。

複雜度分析

  • 時間複雜度: O(n*m),其中 n 是輸入行數,m 是每行字串的長度。最壞情況下,需要遍歷每行字串以提取縮寫和反轉最後一個單字。
  • 空間複雜度: O(m),其中 m 是每行字串的長度。空間主要用於儲存縮寫字串 bc,以及輸入字串本身。

程式碼

#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;
		}
	}
}

Discussion