# String Manipulation# Reverse

e625 - 00483 - Word Scramble

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入字串中的每個單詞反轉,但保持單詞在句子中的順序不變。輸入包含多行,每行包含一個或多個由空格分隔的單詞。

解題思路

程式碼逐字讀取輸入字串。當遇到空格時,將目前儲存的單詞反轉並輸出,然後輸出一個空格。如果讀取到字串結尾,則將最後一個單詞反轉並輸出。程式使用一個字串 b 來儲存每個單詞,並在遇到空格或字串結尾時進行反轉和輸出。

複雜度分析

  • 時間複雜度: O(N*M),其中 N 是輸入字串的長度,M 是單詞的平均長度。因為需要遍歷整個輸入字串,並且對於每個單詞,需要反轉它。
  • 空間複雜度: O(M),其中 M 是單詞的平均長度。因為程式使用一個字串 b 來儲存每個單詞。

程式碼

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

Discussion