有效的括号(leetcode)-栈

3 篇文章 0 订阅
2 篇文章 0 订阅

有效的括号(leetcode)-栈

****leetcode题目链接

思路:

从头开始,把每一个左括号对应的右括号入栈,当遇到右括号时,看栈顶元素是不是遇到的右括号,是就出栈继续,不是的话就返回false。

举个栗子:

{ ( [ ] ( ) ) }
1 2 3 4 5 6 7 8
从左往右,将**{ ( [** 对应的 ***} )]***入栈,当碰到右括号 ] 时,将它与栈顶元素比较,相等就出栈,进行下面的工作,将 ( 对应的 ) 入栈,碰到 )将它与栈顶元素比较,相等出栈,一直处理完所有的元素。

理解:

从左往右入栈左括号对应的右括号,最先入栈的右括号一定是最外层的括号,就应该把它放到栈底最后比较。同理,最后入栈的右括号一定是最里层的,它在栈顶,所以当我们遇到第一个右括号时先与栈顶比较,因为它对应的左括号的右括号在栈顶,只有相等时证明括号成对出现且中间不包含其它的括号

AC代码

class Solution {
public:
    bool isValid( string s ) {
        stack<char>st;	//栈容器,不允许遍历

        for( int i = 0; i < s.size(); i++ ) {

            //碰到左括号时,将对应的右括号入栈
            if( s[i] == '(' || s[i] == '[' || s[i] == '{' ) {
                char choice = s[i];

                switch( choice ) {
                case '(':
                    st.push( ')' );
                    break;

                case '[':
                    st.push( ']' );
                    break;

                case '{':
                    st.push( '}' );
                    break;

                default:
                    break;
                }
            } else {	//碰到右括号时,与栈顶元素比较

                //当有右括号但栈为空时,说明括号不是成对存在的,返回0
                if( st.empty() ) {
                    return 0;
                }

                //右括号等于栈顶元素,比较成功,说明成对存在,出栈比较下一个元素
                if( s[i] == st.top() ) {
                    st.pop();
                } else {	//不等时说明括号不成对或者括号中夹杂着 其它单括号
                    return 0;
                }
            }
        }

        //可能出现([{ }] 缺少右括号的情况,所以要判断栈是否为空
        return st.empty() ? 1 : 0;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值