题解

难度:中等难度

知识点:数学逻辑

思路:

依次判断:
1.若是s[i]为“(”是,是得left++。

当s[i]为“)”时:如果left>0,说明该“)”可以和之前的“(”抵消,因此left--。若此时left=0,说明给“)”无法抵消因此right++。

2.最终left保留没有被抵消的“(”,right保留没有被抵消的“)”。Left+right为最终需要添加的符号数。
图片说明

【注】如果直接对“(”和“)”进行计数操作,最终以abs(left-right)会发生错误。

例:

)(:此时若单纯计算left=1,right=1,abs(left-right)=0;
图片说明
Left+right=2。

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    string s;
    cin>>s;
    int left=0,right=0;
    for(int i=0;i<s.length();i++){
        if(s[i]=='(') left++;
        else right++;
    }
    cout<<abs(left-right)<<endl;
    return 0;
}