# String Manipulation# Pattern Recognition

e570 - 賓語提前

🔗 前往 ZeroJudge 原題

題目描述

題目要求將給定的中文字串,其中包含 "之" 或 "是" 結構助詞的句子,將助詞後面的部分移到字串的最前面,還原成正常的語序。

解題思路

程式碼的核心邏輯是找到字串中 "之" 或 "是" 的位置,然後將字串分割成兩個部分:助詞之前的部分(賓語)和助詞之後的部分(述語)。最後,將述語部分移動到字串的最前面,並輸出重新組成的字串。由於題目說明中文字串每個字佔三個位元組,因此程式碼在處理字串時,每次以三個位元組為單位進行操作。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷字串一次來查找 "之" 或 "是",然後進行字串分割和重新組合。
  • 空間複雜度: O(n),因為程式碼需要創建新的字串 bc 來存儲分割後的字串部分,在最壞情況下,這些字串可能與原始字串的大小相同。

程式碼

#include <iostream>
using namespace std;
string t="之",s="是";
int main(){
	string a;
	while(cin >> a){
		int i=0,al=a.length();
		string b,c;
		for(;i<al;i+=3){
			if((a[i]==t[0]&&a[i+1]==t[1]&&a[i+2]==t[2])||(a[i]==s[0]&&a[i+1]==s[1]&&a[i+2]==s[2])){
				break;
			}
			b+=a[i];
			b+=a[i+1];
			b+=a[i+2];
		}
		for(i+=3;i<al;i+=3){
			c+=a[i];
			c+=a[i+1];
			c+=a[i+2];
		}
		cout <<c<<b<< "\n";
	}
}

Discussion