d017 - AB Circle
題目描述
題目要求找出一個由 'a' 和 'b' 組成的字串中,所有滿足條件的切法。一個切法滿足條件,當且僅當切開後形成的兩個子字串中,一個子字串中 'a' 的數量等於另一個子字串中 'b' 的數量。
解題思路
程式碼使用暴力法,枚舉所有可能的切法。對於長度為 n 的字串,共有 n-1 種切法。對於每一種切法,程式碼計算兩個子字串中 'a' 和 'b' 的數量,並檢查是否滿足條件。如果滿足條件,則輸出該切法的兩個端點。
複雜度分析
- 時間複雜度: O(n^3),其中 n 是字串的長度。外層迴圈枚舉切點 i (O(n)),內層迴圈枚舉切點 j (O(n)),計算子字串中 'a' 和 'b' 的數量需要 O(n) 的時間。
- 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
int c=0;
string a;
while(cin >> a){
cout << "AB Circle #" << ++c << ":\n";
int ac=0,bc=0,al=a.length();
for(int i=0;i<al;++i)
(a[i]=='a')?ac++:bc++;
for(int i=0;i<al;++i){
for(int j=i+1;j<al;++j){
if(j-i==bc||j-i==ac)
cout << i << "," << j << "\n";
}
}
cout << "\n";
}
}