LeetCode OJ-20.Valid Parentheses

LeetCode OJ-20.Valid Parentheses

题目描述

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

Subscribe to see which companies asked this question.

题目理解

​ 一个括号匹配的问题,字符串中仅含需要匹配的几种括号,用栈匹配就好了,在遍历字符串过程中,出现不匹配则将返回值res赋值为false,并退出循环,最后的判断条件应是,栈为空,因为匹配时,会将栈中左半边的括号做pop操作。具体代码在下方,包含一些处理的细节。

Code

class Solution {
public:
    bool isValid(string s) {
        bool res = true;
        std::stack<char> syms;
        int len = (int) s.length();
        int i;
        res = (len % 2) == 0 ? true : false;  // 若字符串中括号匹配,则应满足长度为偶数 
        for (i = 0; i < len && res; ++i) {
            switch (s[i]) {
                case '(':
                    syms.push(s[i]);
                    break;
                case '[':
                    syms.push(s[i]);
                    break;
                case '{':
                    syms.push(s[i]);
                    break;
                case ')':
                    if (syms.empty() || syms.top() != '(') {  // 需要先做判断,符号栈是否为空,对空栈做top是错误行为 
                        res = false;
                    }
                    else {
                        syms.pop();
                    }
                    break;
                case ']':
                    if (syms.empty() || syms.top() != '[') {
                        res = false;
                    }
                    else {
                        syms.pop();
                    }
                    break;
                case '}':
                    if (syms.empty() || syms.top() != '{') {
                        res = false;
                    }
                    else {
                        syms.pop();
                    }
                    break;
                default:
                    break;
            }
        }

        if (syms.empty() != true) {  // 若括号能匹配,则最后符号栈应该为空 
            res = false; 
        } 

        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值