缺失的括号

缺失的括号

http://www.nowcoder.com/questionTerminal/de7d4a4b50f643669f331941afb1e728

题解

难度:中等难度

知识点:数学逻辑

思路:

依次判断:
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;
}
全部评论

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务