题解
难度:中等难度
知识点:数学逻辑
思路:
依次判断:
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; }