# String Manipulation# Circular Shift# Brute Force

b759 - 我明明就有說過= =

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取一個字串 X,然後輸出 X 的所有循環位移。循環位移是指將字串的某個部分移動到字串的開頭,形成新的字串。例如,對於字串 "abcde",其循環位移包括 "abcde", "bcdea", "cdeab", "deabc", "eabcd"。

解題思路

程式碼使用巢狀迴圈來產生所有可能的循環位移。外層迴圈 i 決定了起始位置,內層迴圈 j 則迭代字串的每個字元,並根據起始位置 i 進行輸出。由於需要處理循環的情況,程式碼使用 j < a.length()j >= a.length() 兩個條件來判斷字元的索引是否超出字串的範圍。如果超出範圍,則使用 j - a.length() 來計算實際的索引。

複雜度分析

  • 時間複雜度: O(n^2),其中 n 是字串的長度。外層迴圈迭代 n 次,內層迴圈也迭代 n 次。
  • 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。

程式碼

#include <iostream>
#include <string>

using namespace std;

int main(){
	
	string a;//abcde l5
	
	while(cin >> a){
		
		for(int i=0;i<a.length();i++){
			for(int j=i;j<a.length()+i;j++){
				if(j<a.length()){// a[0]=a 
					cout << a[j];
				}
				if(j>=a.length()){
					cout << a[j-a.length()];
				}
			}
			cout << endl;
		}
	}
	
}

Discussion