简易括号匹配看程序设计

这道括号匹配虽然简单,但也没有一次过,发现还是有些问题需要总结,s[i]的时候需要看是否越界,因此前面要处理i越界了的情况,此时栈不空,也即有前面的左括号未匹配,最后面出战可能有except,查看是否此时可能栈空可能,当时i没到头,但是栈已空,也即后面有未匹配的右括号,因此此处处理占空的情况。后面还有一个访问s[i],此处可能越界,分析发现不可能越界string,因为越界while里第一句处理,占空在出战时处理,因此此时访问必是安全的。
bool isValid(string s) {
        if(s.length()==0) return true;
        stack<char> S;
        int i=0;
        //S.push(s[i]);  这两句可有可无。
        //i++;
        while(!S.empty()||i<s.length())
        {
            if(i==s.length())
               return false;
            if(s[i]=='('||s[i]=='['||s[i]=='{')
            {
                S.push(s[i]);
            }
            else
            {
                if(S.empty()) return false;
                char c=S.top();
                S.pop();
                if((c=='('&&s[i]==')') || (c=='['&&s[i]==']') || (c=='{'&&s[i]=='}'))
                    ;
                else
                    return false;
            }
            i++;
        }
        return true;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值