# Brute Force# String Manipulation

d017 - AB Circle

🔗 前往 ZeroJudge 原題

題目描述

題目要求找出一個由 '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";  
    }  
}

Discussion