# Greedy# String# Iteration

h034 - 宴會 (Banquet)

🔗 前往 ZeroJudge 原題

題目描述

題目給定 n 個字串,要求從每個字串中依序取出大寫字母,直到所有字串都已取出完畢,並將取出的字母連接成一個字串作為答案。

解題思路

這題的解題思路是貪婪演算法。我們從每個字串的起始位置開始,依序檢查每個字串的當前字符是否為大寫字母。如果是,則將該字符添加到答案字串中,並將該字串的指針前進一位。重複此過程,直到所有字串都已處理完畢。由於題目要求依序從每個字串中取出字母,因此我們需要使用迴圈來遍歷所有字串,並在每個字串中遍歷其字符。

複雜度分析

  • 時間複雜度: O(N * M),其中 N 是字串的數量,M 是字串的平均長度。
  • 空間複雜度: O(M),其中 M 是答案字串的最大長度。

程式碼

#include <iostream>
using namespace std;
int n,a[205],d=1;
string s[205],k,ans;
int main(){
	cin >> n;
	for(int i=0;i<n;++i){
		cin >> s[i];
	}
	while(d){
		d=0;
		for(int i=0;i<n;++i){
			if(a[i]<s[i].size()){
				if(s[i][a[i]]>='A'&&s[i][a[i]]<='Z'){
					ans+=s[i][a[i]];
				}
				++a[i];
				d=1;
			}
		}
	}
	cout << ans;
}

Discussion