# String Manipulation# Greedy

e267 - 11192 - Group Reverse

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入字串按照指定的群組數量進行分組,然後對每個群組內的字元進行反轉,最後輸出反轉後的字串。

解題思路

這題的解題思路很直接。首先讀取群組數量 G 和輸入字串 input。然後計算每個群組的長度 n = input.length() / G。接著,使用兩個迴圈遍歷字串。外層迴圈以 n 為步長,遍歷每個群組的起始位置 i。內層迴圈從群組的末尾開始,反向遍歷群組內的每個字元,並將其輸出。

複雜度分析

  • 時間複雜度: O(N),其中 N 是輸入字串的長度。因為需要遍歷字串一次來進行分組和反轉。
  • 空間複雜度: O(1),因為只使用了常數額外的空間。

程式碼

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
  	int G;
  	string input;
  	while( scanf("%d", &G) != EOF && G != 0 ){
    	cin >> input;
    	int il=input.length(),n = il / G;
    	for( int i = 0 ; i < il ; i += n )
      		for( int j = i + n - 1 ; j >= i ; --j )
        		printf("%c", input[j]);
    	printf("\n");
  	}
  	return 0;
}

Discussion