e267 - 11192 - Group Reverse
題目描述
題目要求將輸入字串按照指定的群組數量進行分組,然後對每個群組內的字元進行反轉,最後輸出反轉後的字串。
解題思路
這題的解題思路很直接。首先讀取群組數量 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;
}