<easy>LeetCode Problem -- 20. Valid Parentheses

  • 描述:Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.

Example 1:

Input: “()”
Output: true

Example 2:

Input: “()[]{}”
Output: true

Example 3:

Input: “(]”
Output: false

Example 4:

Input: “([)]”
Output: false

Example 5:

Input: “{[]}”
Output: true

  • 分析:给出一个表达式只含有‘(’‘[’‘{’三种括号,要求判断此表达式是否符合括号匹配规则:
    1.括号类型匹配
    2.括号顺序匹配
  • 思路一:使用栈来解决。如果遇到‘(’‘[’‘{’三种开括号,就将它们push进栈,遇到‘)’‘]’‘}’三种开括号,判断栈顶元素是否是与之匹配的开括号,是则将栈顶元素pop出去,不是则return false。
class Solution {
public:
    bool isValid(string s) {
        stack<char> character_match;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
            character_match.push(s[i]);
            }
            if (s[i] == ')') {
                if (!character_match.empty() && character_match.top() == '(') character_match.pop();
                else return false;
            }
            if (s[i] == ']') {
                if (!character_match.empty() && character_match.top() == '[') character_match.pop();
                else return false;
            }
            if (s[i] == '}') {
                if (!character_match.empty() && character_match.top() == '{') character_match.pop();
                else return false;
            }
        }
        return character_match.empty();
    }
};
  • 思路二:用map优化一下代码。
class Solution {
public:
    bool isValid(string s) {
        stack<char> character_match;
        map<char, char> char_mapping;
        char_mapping.insert(make_pair(')', '('));
        char_mapping.insert(make_pair(']', '['));
        char_mapping.insert(make_pair('}', '{'));
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{') character_match.push(s[i]);
            else if (!character_match.empty() && char_mapping.find(s[i]) != char_mapping.end() && character_match.top() == char_mapping[s[i]]) character_match.pop();
            else return false;
        }
        return character_match.empty();
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值