天天看點

錯字(春季每日一題 57)

貝茜剛買了一台新的筆記本電腦,但不幸的是,她發現自己打不好字,因為相對于小鍵盤來說,她的大蹄子太大了。

貝茜剛剛在嘗試輸入一個平衡括号字元串。

但是,她意識到她可能将其中某個字元輸錯了,即将 ​

​(​

​​ 錯輸為 ) 或将 ​

​)​

​​ 錯輸為 ​

​(​

​。

請幫助貝茜找到字元串的所有位置中,滿足反轉該位置上的字元後,括号字元串變得平衡的位置數量。

有若幹種定義括号字元串是否“平衡”的方式。

最簡單的定義為字元串所包含的 ​

​(​

​​ 和 ​

​)​

​​ 數量必須相同,并且對于字元串的任意字首,所包含的 ​

​(​

​​ 的數目都不少于 ​

​)​

​ 的數目。

例如,以下字元串都是平衡的:

()
(())
()(()())      

以下則不是:

)(
())(
((())))      

輸入格式

一個長度為

輸出格式

輸出字元串的所有位置中,滿足反轉該位置上的字元後,括号字元串變得平衡的位置數量(如果有的話)。

資料範圍

輸入的字元串滿足:最多隻修改一個字元,即可變為平衡括号字元串。

輸入樣例:

()(())))      

輸出樣例:

4      

樣例解釋

輸入字元串如下:

12345678
()(())))      
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main(){
    
    string s;
    cin >> s;
    
    int l = 0, r = 0;
    for(auto c: s)
        if(c == '(') l++;
        else r++;
    
    if(l == r) puts("0");
    else if(r > l){
        
        int a = 0, b = 0;
        for(auto c: s)
            if(c == '(') a++;
            else{
                b++;
                if(b > a){
                    cout << b << endl;
                    break;
                }
            }
        
    }else{
        
        int a = 0, b = 0;
        reverse(s.begin(), s.end());
        for(auto c: s)
            if(c == ')') b++;
            else{
                a ++;
                if(a > b){
                    cout << a << endl;
                    break;
                }
            }
    }
    
    return 0;
}