[LeetCode] Valid Parentheses

Valid Parentheses

LeetCode20

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.


  • 题意:给一个字符串,看是否左右括号匹配.
  • 解法:栈的应用.把左括号放在栈里面,如果有一个右括号与之匹配,就弹出栈。如果有的右括号没有匹配的左括号,答案为false.最后看是否都匹配完了,而且栈要为空.

Code:

class Solution {

    bool isLeft(char ch) {
        return '{' == ch || '[' == ch || '(' == ch;
    }

    bool isMatch(char cLeft, char cRight) {
        return ('{' == cLeft && '}' == cRight) ||
                     ('[' == cLeft && ']' == cRight) ||
                     ('(' == cLeft && ')' == cRight);
    }

public:
    bool isValid(string s) {
        std::stack<char> kStack;
        int i = 0;
        for (; i < (int)s.size(); ++i) {
            if (isLeft(s[i])) kStack.push(s[i]);// push if is left.
            else if (kStack.empty()) break;//s[i] is right.
            else if (isMatch(kStack.top(), s[i])) kStack.pop();//match
            else break;//no
        }
        return kStack.empty() && i >= (int)s.size();//stack is empty and for over.
    }
};

欢迎访问我的github : https://github.com/tsfissure/LeetCode.leetcode持续更新.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值