# String Manipulation# Greedy# Iteration

d422 - 2.字串處理

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據輸入字串中的數字和字母,輸出特定圖形。字串中數字表示後續字母重複出現的次數,如果數字有多位數,則將各位數相加得到總次數。小寫字母 'b' 代表空格,'!' 代表換行。

解題思路

程式碼直接遍歷輸入字串。當遇到數字時,計算數字的總和(如果數字有多位數)。然後,根據計算得到的數字,重複輸出後面的字母。如果遇到 'b',則輸出空格。如果遇到 '!',則輸出換行。程式碼使用一個迴圈來處理輸入字串,並根據字元類型執行相應的操作。

複雜度分析

  • 時間複雜度: O(N),其中 N 是輸入字串的長度。因為程式碼需要遍歷整個輸入字串。
  • 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	string a;
	while(getline(cin,a)){
		for(int i=0,al=a.length(),n=0;i<al;i++){
			if(a[i]>='0'&&a[i]<='9'){
				n+=a[i]-'0';
				while(a[i+1]>='0'&&a[i+1]<='9'){
					i++;
					n+=a[i]-'0';
				}
				i++;
				if(a[i]=='b')
					a[i]=' ';
				while(n--)
					cout << a[i];
			}
			else if(a[i]=='!')
				cout << "\n";
			n=0;
		}
		cout << "\n";
	}
}

Discussion