0
点赞
收藏
分享

微信扫一扫

leetcode-1541. 平衡括号字符串的最少插入次数

Python芸芸 2022-01-24 阅读 72

链接:https://leetcode-cn.com/problems/minimum-insertions-to-balance-a-parentheses-string

题目

果果念

这道题目模拟面试没有做出来,大概花了一个小时才搞清楚逻辑,自己想的比较复杂,感觉逻辑还是可以再清晰一些。提交了虽然过了,但是时间是56ms,还挺长的,相较于其他方法。

这里直接采用了栈的形式,当然,优秀的解法只需要模拟就可以了。说下我的方法,为了一些()),规定了两种方式,分别是#和*,#代表栈中没有(,遇到了),则合成了#;*代表栈中有(,遇到了),则合成了*;然后按照一些情况进行出栈、进栈即可。见代码一。

这里需要说一下比较好的方法,按照奇偶逻辑进行判断。见代码二,思路很清晰。

代码一

class Solution {
public:
    int minInsertions(string s) {
        stack<char> brace;
        int ans=0;
        //特殊符号*,()=*
        for(int i=0;i<s.length();i++){
            if(s[i]=='('){
                brace.push(s[i]);
            }else{
                if(brace.empty()){
                    ans+=1;//补充一个(,#
                    brace.push('#');
                }else if(brace.top()=='#'){
                    //#)
                    brace.pop();//匹配成功
                    //需要清空
                    while(brace.empty()==false){
                        if(brace.top()=='(')
                            ans+=2;//())
                        else if(brace.top()=='*'){
                            ans+=1;//*)
                        }
                        brace.pop();;
                    }
                }else if(brace.top()=='*'){
                    //没有补充的,*)
                    brace.pop();
                    while(brace.empty()==false&&brace.top()!='('){
                        brace.pop();
                        ans+=1;
                    }
                }
                else if(brace.top()=='('){
                    brace.pop();
                    brace.push('*');
                }
            }
        }
        while(brace.empty()==false){
            if(brace.top()=='(')
                ans+=2;
            else if(brace.top()=='#'||brace.top()=='*'){
                ans+=1;
            }
            brace.pop();;
        }
        return ans;
    }
};

代码二

太晚了,有点想不通这个思路了,明天补一下。

手把手解决三道括号相关的算法题

举报

相关推荐

0 条评论